Недавно я наткнулся на эту статью в Википедии. Из моего опыта многопоточности я знаю множество проблем, вызванных тем, что программа может в любой момент переключать потоки между потоками. Тем не менее, я никогда не знал, что оптимизация компилятора и аппаратного обеспечения может переупорядочить операции таким образом, что гарантированно будет работать для одного потока, но не обязательно для многопоточности. Может ли кто-нибудь объяснить, как правильно иметь дело с возможностью переупорядоченных операций в многопоточной среде?
ОБНОВЛЕНИЕ. Я изначально случайно связался с статьей Внештатный вариант вместо Проблема с защитой памяти, которая лучше объясняет проблему.