关于原子指针赋值的保证

时间:2014-02-25 16:52:09

标签: c++ atomic

是否可以保证指针变量的赋值是原子的?

struct S {char a; int* p;};
S * p1 = new S;
S * p2 = new S;

p1 = p2;

2 个答案:

答案 0 :(得分:4)

不,这就是C ++有atomic种类型的原因。

答案 1 :(得分:2)

在C ++ 03中没有这样的保证,因为语言不知道线程。但是在Win32上,指针保证是原子的。

  

对正确对齐的32位变量进行简单的读写操作   原子操作。换句话说,你不会只有一个   变量的一部分更新;所有位都以原子方式更新   时尚。但是,不保证访问同步。如果两个   线程是从同一个变量读写,你不能   确定一个线程是否会在之前执行其读操作   其他执行其写操作。

     

简单的读写操作   正确对齐的64位变量在64位Windows上是原子的。读   并且写入64位值并不保证在32位上是原子的   视窗。对其他大小的变量的读写不是   保证在任何平台上都是原子的。

在C ++ 11中,除非使用std :: atomic,否则也没有这样的保证。