В стандарте С++ 11 модель машины изменилась с одного потока на многопоточную машину.
Означает ли это, что типичный пример оптимизированного чтения static int x; void func() { x = 0; while (x == 0) {} }
больше не будет в С++ 11?
EDIT: для тех, кто не знает этот пример (я серьезно удивлен), пожалуйста, прочтите следующее: https://en.wikipedia.org/wiki/Volatile_variable
EDIT2:
Хорошо, я действительно ожидал, что все, кто знал, что volatile
, видели этот пример.
Если вы используете код в примере, переменная, прочитанная в цикле, будет оптимизирована, делая цикл бесконечным.
Конечно, решение состоит в использовании volatile
, который заставит компилятор читать переменную при каждом доступе.
Мой вопрос в том, что это устаревшая проблема в С++ 11, поскольку модель машины многопоточная, поэтому компилятор должен учитывать одновременный доступ к переменной, которая должна присутствовать в системе.