1

给定线程 TA 和 TB 在下面的 f() 中竞争:

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”副本已过时?

这就是人们多年来在没有明确使用原子或内存屏障的情况下进行编程的方式,并且一切正常。获取互斥锁(或自旋锁)是否会产生隐式内存屏障?谢谢。

编辑:也许这是互斥锁功能是否足够没有易失性的重复?.

4

1 回答 1

2

获取互斥锁与释放互斥锁同步。这意味着无论何时获得互斥体,您都可以观察到在互斥体释放之前排序的每个副作用。该实现可以随意实现。重要的是效果是这些。

于 2013-01-10T12:36:32.367 回答