是否可以保证指针变量的赋值是原子的?
struct S {char a; int* p;};
S * p1 = new S;
S * p2 = new S;
p1 = p2;
答案 0 :(得分:4)
不,这就是C ++有atomic种类型的原因。
答案 1 :(得分:2)
在C ++ 03中没有这样的保证,因为语言不知道线程。但是在Win32上,指针保证是原子的。
对正确对齐的32位变量进行简单的读写操作 原子操作。换句话说,你不会只有一个 变量的一部分更新;所有位都以原子方式更新 时尚。但是,不保证访问同步。如果两个 线程是从同一个变量读写,你不能 确定一个线程是否会在之前执行其读操作 其他执行其写操作。
简单的读写操作 正确对齐的64位变量在64位Windows上是原子的。读 并且写入64位值并不保证在32位上是原子的 视窗。对其他大小的变量的读写不是 保证在任何平台上都是原子的。
在C ++ 11中,除非使用std :: atomic,否则也没有这样的保证。