Jak działa ten przykład kanonicznego stada?
Kiedy trzeba zsynchronizować programy (skrypty powłoki) przez system plików, znalazłemflock
być oparte na rozwiązaniuZalecana (powinien również działaćna NFS). Kanoniczny przykład użycia skryptu (zhttp://linux.die.net/man/1/flock) jest:
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
Nie rozumiem, dlaczego ta cała konstrukcja zapewnia atomowość. W szczególności zastanawiam się, w jakiej kolejnościflock -s 200
i200>/var/lock/mylockfile
są wykonywane, gdy np.bash
wykonuje te wiersze kodu. Czy ten porządek jest gwarantowany / deterministyczny? Tak to rozumiemmusi być deterministycznym, jeśli ten idiom powinien działać. Ale ponieważ powłoka podrzędna jest wywoływana w procesie potomnym, nie rozumiem, jak te dwa procesy się synchronizują. Widzę już tylko wyścig między tymi dwoma poleceniami.
Byłbym wdzięczny, gdyby ktoś mógł spowodować, że moje zamieszanie wokół tego zniknie i wyjaśnić, dlaczego ten konstrukt może być użyty do bezpiecznej synchronizacji procesów.
Jednocześnie, jeśli ktoś wie, byłbym zainteresowany tym, jak bezpieczne jest wybranie jakiegoś arbitralnego pliku (np.200
w przykładzie), szczególnie w kontekście dużego systemu plików NFS z wieloma klientami.