鉴于以下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?的重复。
答案 0 :(得分:2)
获取互斥锁同步释放互斥锁。这意味着无论何时获得互斥锁,您都可以观察互斥锁释放之前排序的每个副作用。实现可以自由地实现它想要的。重要的是影响是这些。