История изменений
Исправление
dzidzitop,
(текущая версия)
:
В общем, не буду тратить жизненную энергию на объяснение. Стандарт и отслеживание цепочек acquire-release помогут всё понять.
Одно только, про double-checked locking. Там барьер памяти ставится после выполнения конструктором инициализации. А какая разница для процессора, стоит он в исходниках просле инициализации в конце конструктора или сразу же после выхода из конструктора? А то, что не всегда возможно/уместно ставить барьер памяти после выхода из конструктора и то, что если класс позиционируется как thread-safe, то он не должен иметь undefined behaviour при использовании в многопоточной среде без синхронизации, должно навести на мысли. Если не наводит - то и ладно.
Исходная версия
dzidzitop,
:
В общем, не буду тратить жизненную энергию на объяснение. Стандарт и отслеживание цепочек acquire-release помогут всё понять.