In C ++ und Beyond 2012: Herb Sutter - atomare & lt; & gt; Waffen, 2 von 2 Herb Sutter argumentiert (um 0:38:20), dass man xchg
, nicht mov
/ mfence
verwenden sollte, um atomic_store
auf x86 zu implementieren. Er scheint auch vorzuschlagen, dass diese bestimmte Instruktionsfolge das ist, was alle zustimmen. Allerdings verwendet GCC letzteres. Warum verwendet GCC diese spezielle Implementierung?
Ganz einfach, die Methode mov
und mfence
ist schneller, da sie keinen redundanten Speicher auslöst, der wie xchg
gelesen wird, was Zeit braucht. Die x86-CPU garantiert eine strenge Reihenfolge der Schreibvorgänge zwischen Threads, also ist es genug.
Beachten Sie, dass einige sehr alte CPUs einen Fehler in der mov
-Anweisung haben, der xchg
notwendig macht, aber dies ist von sehr langer Zeit her und die Arbeit ist nicht den Overhead für die meisten Benutzer wert.
Kredit an @amdn für die Information über den Fehler in alten Pentium CPUs, der xchg
in der Vergangenheit benötigt.