Припустимо, у мене є два ресурси, названі 0
та 1
, до яких можна отримати доступ виключно.
Чи є можливість відновити "індекс" "паралельного процесора", який xargs
запускається, щоб використовувати його як безкоштовну службу взаємного виключення? Наприклад, врахуйте наступні паралельні обчислення:
$ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {}"
consuming task 1
consuming task 2
consuming task 3
consuming task 4
consuming task 5
consuming task 6
consuming task 7
consuming task 8
Моє запитання - чи існує магічне слово, скажімо index
, де виглядатиме результат
$ echo {1..8} | xargs -d " " -P 2 -I {} echo "consuming task {} with resource index"
consuming task 1 with resource 0
consuming task 2 with resource 1
consuming task 3 with resource 1
consuming task 4 with resource 1
consuming task 5 with resource 0
consuming task 6 with resource 1
consuming task 7 with resource 0
consuming task 8 with resource 0
де єдиною гарантією є те, що існує лише коли-небудь один процес, що використовує ресурс 0
і той самий для 1
. В основному, я хотів би повідомити цей індекс до дочірнього процесу, який би дотримувався правила використовувати лише той ресурс, про який йому сказали.
Звичайно, бажано було б поширити це на більш ніж два ресурси. Оглядаючи документи, xargs
напевно, цього не можна зробити. Чи є мінімально еквівалентне рішення? Використання / очищення файлів як підроблених блокувань не є кращим.