Существуют ли какие-либо компиляторы C или C++, реализующие «агрессивную» модель согласованности памяти для volatile
переменных? Под «агрессивной» моделью согласованности я подразумеваю сопровождение всех операций записи в переменные volatile
барьерами памяти в сгенерированном коде.
Насколько я знаю, это обычное поведение для компиляторов C или C++ на платформе IA64 (Itanium ). А х86? Существует ли компилятор, который реализует (или может быть сконфигурирован для реализации )Itanium -подобного подхода к обработке volatile
переменных на платформе x86?
Изменить:Я смотрю на код, который VS 2005 генерирует (после прочтения комментариев ), и я не вижу ничего, что напоминало бы какой-либо барьер памяти при доступе к переменным volatile
. Это совершенно нормально для обеспечения согласованности памяти на платформе с одним -многоядерным -процессором x86,из-за протоколов кэширования MESIF (Intel )и MOESI (AMD ).
Однако этого кажется недостаточным на многопроцессорной платформе SMP x86 -. Платформе SMP потребуются барьеры памяти в сгенерированном коде, чтобы обеспечить согласованность памяти между процессорами. Что мне не хватает? Что именно имеет в виду Microsoft, когда утверждает, что уже приобрела -семантику выпуска для volatile
переменных?