В стандарте C ++ есть часть о многопоточной модели памяти, которую я не понимаю.
A видимый побочный эффект A на скалярном объекте или бите -поле M относительно вычисления значения B для M удовлетворяет условиям:
Значение non-atomi c скалярный объект или битовое поле M, как определено оценкой B, должно быть значением, хранимым видимым побочным эффектом A .
А также в соответствии со стандартом C ++, " происходит до того, как " связь между потоками должна быть установлена " синхронизируется с " или " упорядочен по зависимости до", поэтому" произойдет до"отношения не будут установлены без синхронизации между потоками.
Теперь Предположим, что есть два потока T1 и T2, оба запущены основным потоком и никогда не выполняют никакой синхронизации друг с другом (поэтому не будет никаких « до того, как » установится связь между T1 и T2). Если T1 записывает в non-atomi c переменную M, то, согласно приведенной выше цитате, T2 никогда не должен видеть M, модифицированный T1, потому что " не происходит до " взаимосвязь между T1 и T2.
Вместо этого T2 имеет " синхронизируется с ", связь устанавливается с основным потоком в момент запуска T2, поэтому T2 должен видеть значение M, установленное основным поток до того, как он был запущен основным потоком, потому что между главным потоком и T2 существует отношение " происходит до ".
Верно? Однако я провел эксперимент на моей машине, и это было не так. Что не так?