Wie würde ein Code-Test und setzte Verhalten ohne spezielle Hardware-Anweisung?
-
01-07-2019 - |
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 ...)
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, ...)