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