Это сложный вопрос, пожалуйста, внимательно подумайте, прежде чем ответить.
Рассмотрим эту ситуацию. Два потока (читатель и писатель) обращаются к одному глобальному int
. Это безопасно? Обычно я отвечаю без мыслей, да!
Однако мне кажется, что Херб Саттер так не считает. В своих статьях об эффективном параллелизме он обсуждает некорректную очередь без блокировки и исправленную версию .
В конце первой статьи и начале второй он обсуждает редко рассматриваемый признак переменных, порядок записи. Интеллектуальные, хорошие, но целые не обязательно упорядочены, что может разрушить любой алгоритм без блокировки, включая мой сценарий, описанный выше. Я полностью согласен с тем, что единственный способ гарантировать правильное многопоточное поведение на всех существующих и будущих платформах - это использовать атомики (барьеры памяти AKA) или мьютексы.
мой вопрос; Является ли перезапись записи проблемой на реальном оборудовании? Или многопоточная паранойя просто педантична?
А как насчет классических однопроцессорных систем?
А как насчет более простых процессоров RISC, таких как встроенный power-pc?
Разъяснение : Меня больше интересует, что сказал г-н Саттер о записи в переменную переупорядочения аппаратного обеспечения (процессор / кэш). Я могу остановить оптимизатор от взлома кода переключателями компилятора или ручной проверки сборки после компиляции. Однако я хотел бы знать, может ли аппаратное обеспечение все еще испортить код на практике.