std ::原子和多核处理器

时间:2016-07-04 19:29:05

标签: c++ multithreading c++11 concurrency

考虑我有一个std::atomic<long>变量,以及两个写入变量的线程。我有一台多核机器,所以这两个线程同时运行。

假设写入恰好在同一时间发生(如果可能的话),有什么机制可以确保两个写入的结果不以任何方式交错?

1 个答案:

答案 0 :(得分:4)

在使用gcc编译的64位x86处理器上,此代码为:

#include <atomic>

std::atomic<long> x;

void foo()
{
  x += 1;
}

导致这个汇编程序:

foo():
        lock addq       $1, x(%rip)
        ret

lock是一个x86指令前缀,它使处理器(和内存缓存)确保指令相对于其他内核的内存视图是原子的并且排序良好。