Mit Multi-Core-RISC-Verarbeitung und separaten Kern c Da das Gedächtnis in der Mischung eines modernen Prozessors liegt, ist es nicht länger der Fall, dass irgendeine "triviale" Hochsprache-Lese- oder Schreibkonstrukte (oder in der Tat viele einmal auf einmal 8086 "atomare" Assembleranweisungen) konstruiert werden) kann als atomar angesehen werden. In der Tat, es sei denn, ein Assemblerbefehl ist speziell atomar konstruiert, ist er wahrscheinlich nicht atomar - und das schließt die meisten Mechanismen für Speicherlesevorgänge ein. Selbst eine lange Ganzzahl, die auf Assembler-Ebene gelesen wird, kann durch simultanes Schreiben von einem anderen Prozessorkern, der denselben Speicher teilt und asynchrone Cache-Aktualisierungsaktionen auf der RISC-Prozessor-Ebene verwendet, beschädigt werden. Denken Sie daran, dass auf einem Prozessor mit mehreren RISC-Kernen selbst Assemblersprachanweisungen nur "höhere" Codeanweisungen sind! Sie wissen nie wirklich, wie sie auf der Bit-Ebene implementiert werden, und es ist vielleicht nicht ganz das, was Sie erwartet haben, wenn Sie ein altes 8086 (Single-Core) Assembler-Handbuch gelesen haben. Windows stellt native Systemkompatible atomare Operatoren zur Verfügung, und Sie wären gut beraten, diese zu verwenden, anstatt irgendwelche Grundannahmen über atomare Operationen zu machen.
Warum die Windows-Operatoren verwenden? Eines der ersten Dinge, die Windows tut, ist festzustellen, auf welcher Maschine es läuft. Einer der Schlüsselaspekte, die es sicherstellen, ist, was atomare Operationen dort sind und wie sie funktionieren. Wenn Sie möchten, dass Ihr Code bei zukünftigen Prozessoren gut in die Zukunft passt, können Sie diesen Aufwand in Ihrem eigenen Code duplizieren (und ständig aktualisieren), oder Sie können die Tatsache nutzen, dass Windows bereits beim Start alles erledigt hat. Es integrierte dann den notwendigen Code zur Laufzeit in seine API.
Lesen Sie die MSDN-Seiten zu atomaren Operationen. Die Windows API zeigt diese für Sie an. Manchmal wirken sie klobig oder ungeschickt - aber sie sind zukunftssicher und funktionieren immer genau so, wie es auf der Verpackung steht.
Woher weiß ich das? Nun, denn wenn sie es nicht tun würden - dann könnten Sie Windows nicht ausführen. Punkt. Es macht nichts, einen eigenen Code zu erstellen. Wenn Sie Code schreiben, ist es immer eine gute Idee, Parsimony zu verstehen und Occam's razor zu betrachten. Mit anderen Worten, wenn Windows dies bereits tut und Ihr Code Windows zum Ausführen benötigt, dann verwenden Sie, was Windows bereits tut, anstatt viele alternative und zunehmend komplexe hypothetische Lösungen auszuprobieren, die funktionieren können oder nicht. Etwas anderes zu tun ist nur eine Verschwendung von Zeit (es sei denn natürlich, dass Sie das sind).
+1, sehr gute Punkte. Interessierte können sich beispielsweise http://en.wikipedia.org/wiki/Memory_barrier und die verlinkten Informationen ansehen. – mghie