给定线程 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”副本已过时?
这就是人们多年来在没有明确使用原子或内存屏障的情况下进行编程的方式,并且一切正常。获取互斥锁(或自旋锁)是否会产生隐式内存屏障?谢谢。
编辑:也许这是互斥锁功能是否足够没有易失性的重复?.