锁保护数据的缓存一致性

cache coherency of lock-protected data

本文关键字:缓存 一致性 数据 保护      更新时间:2023-10-16

给定线程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'已经过期?

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

编辑:也许这是一个dup互斥锁函数足够没有易失性?.

获取互斥锁与释放互斥锁是同步的。这意味着无论何时获取互斥锁,都可以观察到在释放互斥锁之前排序的每一个副作用。实现可以自由地实现它想要的任何方式。重要的是这些效果