缓存锁定保护数据的一致性

时间:2013-01-10 12:33:45

标签: c++ locking mutex memory-barriers

鉴于以下f()中的线程TA和TB竞争:

struct C {
  C(): a(0) {}
  int a;
  std::mutex mtx;
  void f() {
    ... // use 'a' in readonly mode
    std::lock_guard<std::mutex> lock(mtx); // assume TA gets the lock first, then TB
    a += 2; // what value of 'a' will TB see?
  }
}

在获得锁定后,TB如何知道他的缓存副本'a'是陈旧的?

这是人们在没有明确使用原子或记忆障碍的情况下编程的年龄,这一切都很好。获取互斥锁(或自旋锁)是否会发出隐式内存屏障?感谢。

编辑:也许这是Are mutex lock functions sufficient without volatile?的重复。

1 个答案:

答案 0 :(得分:2)

获取互斥锁同步释放互斥锁。这意味着无论何时获得互斥锁,您都可以观察互斥锁释放之前排序的每个副作用。实现可以自由地实现它想要的。重要的是影响是这些。