Gibt es C- oder C++ - Compiler, die ein "aggressives" Speicherkonsistenzmodell für volatile
Variablen implementieren? Mit "aggressivem" Konsistenzmodell meine ich, dass alle Schreibvorgänge mit volatile
Variablen mit Speicherbarrieren im generierten Code einhergehen.C- und C++ - Compiler mit "aggressiver" flüchtiger Semantik
AFAIK, das ist das übliche Verhalten für C oder C++ - Compiler auf IA64 (Itanium) -Plattform. Was ist mit x86? Gibt es einen Compiler, der den Itanium-ähnlichen Ansatz zur Verarbeitung von volatile
Variablen auf der x86-Plattform implementiert (oder konfiguriert werden kann)?
Edit: ich VS 2005 Blick auf den Code erzeugt (nach dem Lesen der Kommentare) und ich sehe nichts, dass jede Art von Speicherbarriere ähneln würde, wenn volatile
Variablen zugreifen. Dies ist vollkommen in Ordnung, um aufgrund der MESIF (Intel) - und MOESI (AMD) -Cache-Protokolle die Speicherkonsistenz auf einer Single-CPU-Multi-Core-x86-Plattform sicherzustellen.
Dies scheint jedoch auf einer Multi-CPU SMP x86-Plattform nicht ausreichend zu sein. Eine SMP-Plattform würde Speicherbarrieren in dem erzeugten Code erfordern, um die Speicherkonsistenz zwischen den CPUs sicherzustellen. Was vermisse ich? Was genau bedeutet Microsoft, wenn sie behaupten, dass sie bereits eine Semantik zum Akquirieren/Freigeben unter volatile
Variablen haben?
[Laut Raymond Chen] (https://blogs.msdn.com/b/oldnewthing/archive/2011/04/19/10155452.aspx?Redirected=true) erhalten Sie dieses Verhalten mit VS2005 und neuer – Praetorian
@ Prætorian: [Laut offizieller Dokumentation] (http://msdn.microsoft.com/en-us/library/12a04hfd.aspx). ; -] – ildjarn
@AndreyT: Testen Sie VC++ 2005 oder VC++ 2005 SP1? IIRC, VC++ 2005 RTM hatte einen Fehler, bei dem 'volatile' nicht die erwartete Semantik hatte, die in SP1 und VC++ 2008+ behoben wurde. – ildjarn