指针赋值在C++中是原子的吗?

fbr*_*eto 12 c++ multithreading pointers variable-assignment atomicity

我实际上已经听过两种说法.我怀疑他们不是,但我想让这个话题得到解决.

Gri*_*zly 16

C++ 03不知道线程的存在,因此原子性的概念对C++ 03没有多大意义,这意味着它没有说明任何内容.

C++ 11确实知道线程,但再一次没有说明分配指针的原子性.但是C++ 11确实包含std::atomic<T*>,它保证是原子的.

请注意,即使在您的平台上写入原始指针是原子指针,编译器仍然可以随意移动该指令,因此这并不能真正为您带来任何好处.

如果你需要写一个在线程之间共享的指针,可以使用std::atomic<T*>(或者还不是官方的boost::atomic<T*>,gccs原子内在函数或windows Interlocked*)或者在互斥锁中包含对该指针的所有访问.