¿Hay algún compilador C o C++ que implemente un modelo de coherencia de memoria "agresivo" para las variables volatile
? Por modelo de coherencia "agresiva" me refiero a acompañar todas las escrituras a las variables volatile
con barreras de memoria en el código generado.compiladores C y C++ con semántica volátil "agresiva"
AFAIK, este es el comportamiento habitual de los compiladores C o C++ en la plataforma IA64 (Itanium). ¿Qué hay de x86? ¿Existe un compilador que implemente (o se pueda configurar para implementar) un enfoque tipo Itanium para manejar las variables volatile
en la plataforma x86?
Editar: estoy mirando el código VS 2005 genera (después de leer los comentarios) y no veo nada que pueda parecerse a cualquier tipo de barrera de memoria al acceder a volatile
variables. Esto está perfectamente bien para garantizar la consistencia de la memoria en una plataforma x86 de múltiples núcleos de una sola CPU, gracias a los protocolos de caché MESIF (Intel) y MOESI (AMD).
Sin embargo, esto parece ser insuficiente en una plataforma SMP x86 de varias CPU. Una plataforma SMP requeriría barreras de memoria en el código generado para garantizar la consistencia de la memoria entre las CPU. ¿Qué me estoy perdiendo? ¿Qué quiere decir exactamente Microsoft cuando afirman que ya tienen una semántica de adquisición-liberación en las variables volatile
?
[Según Raymond Chen] (https://blogs.msdn.com/b/oldnewthing/archive/2011/04/19/10155452.aspx?Redirected=true) obtienes este comportamiento con VS2005 y más reciente – Praetorian
@ Prætorian: [Según la documentación oficial] (http://msdn.microsoft.com/en-us/library/12a04hfd.aspx) también. ; -] – ildjarn
@AndreyT: ¿Está probando VC++ 2005 o VC++ 2005 SP1? IIRC, VC++ 2005 RTM tenía un error donde 'volátil 'no tenía la semántica esperada, que se corrigió en SP1 y VC++ 2008+. – ildjarn