Concurrency: Атомарность и летучесть в модели памяти C++11

Глобальная переменная совместно используется 2 параллельно выполняющимися потоками на 2 разных ядрах. Потоки записывают в переменные и читают из них. Может ли один поток прочитать устаревшее значение для атомарной переменной? Каждое ядро может иметь значение разделяемой переменной в своем кэше, и когда один поток записывает в свою копию в кэше, другой поток на другом ядре может прочитать устаревшее значение из своего кэша. Или компилятор делает сильное упорядочивание памяти, чтобы прочитать последнее значение из другого кэша? В стандартной библиотеке c++11 есть поддержка std::atomic. Чем она отличается от ключевого слова volatile? Как volatile и atomic типы будут вести себя по-разному в приведенном выше сценарии?

54
задан Abhijit_K 11 January 2012 в 01:18
поделиться