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

时间:2012-01-19 01:06:31

标签: c++ multithreading pointers variable-assignment atomicity

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

2 个答案:

答案 0 :(得分:16)

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

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

请注意,即使在您的平台上写入原始指针是原子指针,编译器仍然可以随意移动该指令,因此并不能真正为您购买任何东西。

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

答案 1 :(得分:2)

C ++规范没有定义特定的线程行为。根据编译器和平台的不同,指针赋值可能是原子的,也可能不是原子的。