Если есть два потока, обращающихся к глобальной переменной, то многие учебники говорят, что переменная volatile запрещает компилятору кэшировать переменную в регистре и, таким образом, не обновляется правильно. Однако два потока, получающих доступ к общей переменной, являются тем, что требует защиты через мьютекс, не так ли? Но в этом случае между блокировкой потока и высвобождением мьютекса код находится в критическом разделе, где только один поток может получить доступ к переменной, и в этом случае переменная не должна быть изменчивой?
Итак, каково использование/цель волатильности в многопоточной программе?