Wad*_*Wad 1 c++ concurrency multithreading c++11
考虑到我有一个std::atomic<long>变量和两个写入变量的线程。我有一台多核机器,所以这两个线程真正并发运行。
假设写入恰好同时发生(如果可能的话),有什么机制可以确保两次写入的结果不会以任何方式交错?
在使用 gcc 编译的 64 位 x86 处理器上,此代码:
#include <atomic>
std::atomic<long> x;
void foo()
{
x += 1;
}
Run Code Online (Sandbox Code Playgroud)
结果在这个汇编器中:
foo():
lock addq $1, x(%rip)
ret
Run Code Online (Sandbox Code Playgroud)
lock 是一个 x86 指令前缀,它使处理器(和内存缓存)确保指令是原子的,并且相对于其他内核的内存视图有序。