Компиляторы C и C++ с «агрессивной» семантикой volatile

Существуют ли какие-либо компиляторы 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переменных?

11
задан AnT 27 June 2012 в 22:42
поделиться