Frage

Die meisten der Implementierungen finde ich einen Hardware-Befehl benötigen, dies zu tun. Jedoch stark bezweifle, dass ich dies erforderlich ist (wenn es ist, ich kann nicht herausfinden, warum ...)

War es hilfreich?

Lösung

Sie brauchen keinen Test und Befehlssatz mutual exclusion Verriegelung zu erhalten, wenn das ist, was Sie fragen. Dijkstra beschrieb den ersten gegenseitigen Ausschluss Algorithmus Ich bin mir dessen bewusst, 1965. Der Titel des Papiers war „Lösung eines Problems in Concurrent Programming Steuerung“, Google-Suche für eine Kopie in Ihrer Nähe. Der ursprüngliche Algorithmus benötigt keine spezielle Unterstützung durch die Hardware überhaupt, aber in der CPU eine atomare Anweisung Bereitstellung verbessert die Leistung.

Test-and-Set, Atom swap und Load-Linked + store-bedingten sind alle gängigen Primitiven für CPUs zur Verfügung zu stellen. Alle verwendet werden können, gegenseitigen Ausschluss zu implementieren, die dann verwendet werden kann, zu implementieren, was Verriegelungs Semantik Sie wollen.

Andere Tipps

Wenn Sie einen Quer Bogen Weg möchten, dies zu tun, und gcc verwenden, dann können Sie gcc Atom builtins verwenden:

http://gcc.gnu.org/onlinedocs/gcc/Atomic -Builtins.html

dieser Aufruf für die aktuelle Build-Architektur in einer Hardware-spezifischen Maschinenbefehl führen. Auf diejenigen, die sie nicht unterstützen, wird die Kompilierung fehlschlagen. (Ich glaube, ...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top