Wie funktioniert dieses kanonische Herdenbeispiel?

Wenn man Programme (Shellskripte) über Dateisystem synchronisieren muss, habe ich eine gefundenflock-basierte Lösung zu seinempfohlen (sollte auch funktionierenauf NFS). Das kanonische Beispiel für die Verwendung innerhalb eines Skripts (vonhttp://linux.die.net/man/1/flock) ist:

(
flock -s 200

# ... commands executed under lock ...

) 200>/var/lock/mylockfile 

Ich verstehe nicht ganz, warum dieses ganze Konstrukt die Atomizität sicherstellt. Insbesondere frage ich mich, in welcher Reihenfolgeflock -s 200 und200>/var/lock/mylockfile werden ausgeführt, wenn z.B.bash führt diese Codezeilen aus. Ist diese Reihenfolge garantiert / deterministisch? So wie ich es verstehe, ist esMuss Seien Sie deterministisch, ob dieses Idiom funktionieren sollte. Da eine untergeordnete Shell in einem untergeordneten Prozess erzeugt wird, verstehe ich nicht, wie sich diese beiden Prozesse selbst synchronisieren. Ich sehe nur eine Racebedingung zwischen diesen beiden Befehlen.

Ich würde mich freuen, wenn jemand meine Verwirrung darüber zum Verschwinden bringen und erklären könnte, warum dieses Konstrukt verwendet werden kann, um Prozesse sicher zu synchronisieren.

Wenn jemand weiß, würde mich gleichzeitig interessieren, wie sicher es ist, nur einen beliebigen Dateideskriptor (wie z200 im Beispiel), insbesondere im Kontext eines großen NFS-Dateisystems mit vielen Clients.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage