Ответ 1
С++ 03 не знает о существовании потоков, поэтому понятие атомарности не имеет большого смысла для С++ 03, а это значит, что в нем ничего не говорится.
С++ 11 знает о потоках, но в очередной раз ничего не говорит об атомарности присвоения указателей. Однако С++ 11 содержит std::atomic<T*>
, который, как гарантируется, является атомарным.
Обратите внимание, что даже если запись на исходный указатель является атомарной на вашей платформе, компилятор по-прежнему может свободно перемещать эту настройку, так что вы действительно ничего не покупаете.
Если вам нужно написать указатель, который используется совместно между потоками, используйте либо std::atomic<T*>
(или еще не официальный boost::atomic<T*>
, атомарные свойства gccs или окна Interlocked *), либо завершите все обращения к этому указателю в мьютексах.