Ich habe The Art of Multiprocessor Programming 1 studiert und ihr Text ist nicht klar genug, genau wie das Buch, auf das Sie sich beziehen. Hier sind einige Zitate von TAMPP:
Zitat 1 (Definition von sperrenfrei)
Eine Methode ist sperrfrei, wenn sie garantiert, dass ein Methodenaufruf unendlich oft in einer endlichen Anzahl von Schritten beendet wird.
Zitat 2 (Definition von Nonblocking)
Ein ausstehender Aufruf einer Gesamtmethode ist niemals erforderlich, um auf den Abschluss eines weiteren ausstehenden Aufrufs zu warten.
Zitat 3 (behaupten, dass sperrenfrei nicht blockiert)
Die wartungsfreien und sperrfreien nicht blockierenden Fortschrittsbedingungen garantieren, dass die Berechnung insgesamt Fortschritte macht, unabhängig davon, wie das System Threads plant.
Das Problem ist, dass der Anspruch in Zitat 3 nicht offensichtlich aus der Definition in Zitat 1 folgt. Wie bereits erwähnt, scheint eine synchronisierte Warteschlange Zitat 1 zu erfüllen: Unendlich oft wird eine Methode die Sperre erfolgreich erlangen und vervollständigen.
Beachten Sie insbesondere den recht vagen Satz in Zitat 3: "Unabhängig davon, wie das System Threads plant". Dem geht keine formale Beschreibung des "Thread-Scheduling-Systems" voraus, daher müssen wir seine Eigenschaften auf der Grundlage unserer Vorurteile darüber rekonstruieren, was die Definitionen bedeuten sollten :
- führt das System immer Anweisungen gewissen Gewinde;
- Es darf niemals Anweisungen eines bestimmten Threads ausführen .
- Alle Threads rufen die betreffende Methode auf.
Auf einem solchen System kann eine Blockierungsmethode nicht sperrenfrei sein: Wenn der Thread, der die Sperre hält, nie wieder zur Ausführung eingeplant wird, gibt es keinen anderen Thread, der seinen Methodenaufruf in einer endlichen Anzahl von Schritten abschließen kann Einige Threads, die Schritte der Methode ausführen. Für ein realistischeres System, das garantiert, dass jedem Thread irgendwann CPU-Zeit eingeräumt wird, muss die Definition explizit die nicht blockierende Eigenschaft enthalten:
Die Definition von sperrenfrei wurde korrigiert
Eine Methode ist sperrenfrei, wenn sie nicht blockiert ist, und garantiert außerdem, dass ein Methodenaufruf unendlich oft in einer endlichen Anzahl von Schritten beendet wird.
1 Maurice Herlihy, Nir Shavit, Die Kunst der Multiprozessor-Programmierung, Elsevier 2008, S. 58-60