Linux c+中的并发问题+;11

Linux c+中的并发问题+;11,linux,multithreading,c++11,linux-device-driver,Linux,Multithreading,C++11,Linux Device Driver,最近我学习了c++11中的多线程库。我认为有一个全局变量int x=0,并且有两个单独的线程在两个独立的内核中运行。两个线程是否可以同时写入x的内存?例如,在线程#1设x=0x0000,int线程#2设x=0xffff中,x是否可以是0x00ff的某个无效值 我用g++clangmsvc在x86-64 linux(windows)上测试了它,答案是否定的,x的值是0x0000或0xffff。看起来赋值操作是原子的,或者只是巧合 有人能帮我一下吗?理论上讲,你最终肯定会得到0x00ff,甚至0xa

最近我学习了c++11中的多线程库。我认为有一个全局变量int x=0,并且有两个单独的线程在两个独立的内核中运行。两个线程是否可以同时写入x的内存?例如,在线程#1设x=0x0000,int线程#2设x=0xffff中,x是否可以是0x00ff的某个无效值

我用g++clangmsvc在x86-64 linux(windows)上测试了它,答案是否定的,x的值是0x0000或0xffff。看起来赋值操作是原子的,或者只是巧合


有人能帮我一下吗?

理论上讲,你最终肯定会得到
0x00ff
,甚至
0xabcd
。如果两个线程试图修改对象的值,并且这些表达式没有排序(即同步),则程序的行为是未定义的

现在,这在实践中是否可能发生——这实际上取决于操作系统和硬件体系结构,尽管概率很低,但仍然可能发生

使用
std::atomic
代替
int

看看std::atomic