Многопоточность C++: видимые побочные эффекты неатомарных переменныхC++

Программы на C++. Форум разработчиков
Anonymous
 Многопоточность C++: видимые побочные эффекты неатомарных переменных

Сообщение Anonymous »

В стандарте C++ есть часть, касающаяся многопоточной модели памяти, которую я не понимаю.

видимый побочный эффект< /strong> A на скалярном объекте или битовом поле M относительно вычисления значения B из M удовлетворяет условиям:
  • A происходит до B и
  • не существует другого побочного эффекта от X до M, такого, что A происходит раньше X и X происходят раньше B.

Значение неатомарный
скалярный объект или битовое поле M, как определено оценкой B, должно быть значением, сохраненным видимым побочным эффектом A.

А также согласно стандарту C++ связь «происходит до» между потоками должна быть установлена ​​с помощью «синхронизируется с» или «< em>упорядочивается по зависимостям до", поэтому связь "происходит до" не будет установлена ​​без синхронизации между потоками.
Теперь предположим, что есть два потока T1 и T2, оба запускаются основным потоком и никогда не синхронизируются друг с другом (поэтому не будет никаких отношений «происходит раньше», установленных между T1 и T2). Если T1 записывает в неатомарную переменную M, то, согласно приведенной выше цитате, T2 никогда не должен видеть M, измененную T1, поскольку не существует связи «происходит раньше». между T1 и T2.
Вместо этого T2 имеет отношение «синхронизируется с», установленное с основным потоком во время запуска T2, поэтому T2 должен видеть значение M устанавливается основным потоком до того, как он был запущен основным потоком, поскольку между основным потоком и T2 существует связь «происходит раньше».
Верно ? Однако я провел эксперимент на своей машине, и это не так. Что не так?

Подробнее здесь: https://stackoverflow.com/questions/612 ... -variables

Вернуться в «C++»