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