Ich habe gelesen, dass ein Unix-ähnliches System normalerweise eine empfohlene Sperre für Datei-E / A verwendet, während die obligatorischen Sperren von Microsoft-Betriebssystemen verwendet werden. Wenn ich das obligatorische Sperren richtig verstanden habe, wird die Dateisperre vom Betriebssystem selbst erzwungen. Aber ich verstehe nicht die Intuition von Advisory Locking. Nehmen Sie das Beispiel von zwei Prozessen, sagen Sie "A" und "B", die an der Datei "foo" arbeiten. Nehmen wir an, "A" schreibt in "foo" und "B" liest aus "foo". Wie würde das Sperren von Hinweisen in diesem Szenario funktionieren? Wenn das Betriebssystem / Dateisystem keine Sperre für "foo" erzwingt, wie wird dann die Konsistenz für Lese- und Schreibvorgänge aufrechterhalten?
quelle
man fcntl
: pubs.opengroup.org/onlinepubs/9699919799/functions/fcntl.html (POSIX)Antworten:
Advisory Locking ist für Prozesse gedacht, die "friedlich" zusammenarbeiten. Der Kernel verfolgt die Sperren, erzwingt sie jedoch nicht - es liegt an den Anwendungen, sie zu befolgen. Auf diese Weise muss der Kernel nicht mit Situationen wie Deadlocks umgehen.
In System V Unix wurde die obligatorische Sperrung eingeführt, aber es stellt sich heraus, dass das Design nicht das hellste war. (Das heißt, es gibt Möglichkeiten, dies zu umgehen.) Wenn Sie unter Unixy-Systemen eine echte obligatorische Sperrung benötigen, befolgen Sie ein Client-Server-Entwurfsmuster, bei dem der Server die Autorität für die gemeinsam genutzten Ressourcen ist.
quelle