Załóżmy, że mam dwa zasoby, o nazwie 0
i 1
, do których można uzyskać dostęp wyłącznie.
Czy jest jakiś sposób na odzyskanie „indeksu” „procesora równoległego”, który xargs
uruchamia się w celu wykorzystania go jako bezpłatnej usługi wzajemnego wykluczania? Np. Rozważ następujące obliczenia równoległe:
$ 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
Moje pytanie brzmi, czy istnieje magiczne słowo, powiedzmy index
, gdzie wyglądałoby wyjście
$ 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
gdzie jedyną gwarancją jest to, że istnieje tylko jeden proces wykorzystujący zasoby 0
i taki sam dla 1
. Zasadniczo chciałbym przekazać ten indeks do procesu potomnego, który przestrzegałby reguły, aby używać tylko zasobu, do którego została skierowana.
Oczywiście lepiej byłoby rozszerzyć to na więcej niż dwa zasoby. Sprawdzanie dokumentów, xargs
prawdopodobnie nie może tego zrobić. Czy istnieje minimalne równoważne rozwiązanie? Używanie / czyszczenie plików jako fałszywych zamków nie jest zalecane.
źródło