Я правильно понял, что при отсутствии другой синхронизации потоков, все доступ к совместно используемому изменяемому состоянию должны использовать некоторую форму безопасности нижнего уровня (например, барьеры памяти), чтобы избежать операции реорганизация (будь то через компилятор, JIT или CPU)?Неустойчивый доступ к общему разрешенному состоянию
Например, на C# я должен использовать Volatile.Read (ref someVar) и Volatile.Write (ref someVar, someValue) везде, где я не использую какую-либо другую синхронизацию?
У меня такое ощущение, что ответ да, я должен. Но это кажется ... Чрезмерным.
записку, прежде чем кто встревает: Я не говорю о безопасности потоков или параллелизм здесь; просто согласованность памяти. Я хорошо знаю, что согласованность памяти не является единственной проблемой при написании многопоточного кода.
Отличный ответ, спасибо. – Xenoprimate