锁保护数据的缓存一致性
cache coherency of lock-protected data
给定线程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互斥锁函数足够没有易失性?.
获取互斥锁与释放互斥锁是同步的。这意味着无论何时获取互斥锁,都可以观察到在释放互斥锁之前排序的每一个副作用。实现可以自由地实现它想要的任何方式。重要的是这些效果
相关文章:
- cmake更新缓存的变量
- 试图对缓存进行跨步测试,但程序并没有结束
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 通过ccmake在cmake中缓存依赖选项
- 标准::make_pair 和标准::make_optional之间的一致性
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 如何使缓存线程安全
- 可以从std::string继承以提供类型一致性吗
- 存储指令是否会阻止缓存未命中的后续指令?
- 缓存局部性与函数调用
- Qt 网页程序集缓存
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- std::shared_ptr vs std::make_shared:意外的缓存未命中和分支预测
- 标记为 std::memory_order_seq_cst 的单个原子操作是否会在所有位置触发顺序一致性?
- 多个 rocksdb 实例:使用单个共享缓存还是多个独立缓存?
- 无法链接 LRU 缓存C++
- 与linux信号/条件变量相比,缓存一致性开销
- 如何在c++中实现与抽象类指针向量的缓存一致性
- 使用Interlocks进行线程同步并保持缓存一致性
- 锁保护数据的缓存一致性