使用Interlocks进行线程同步并保持缓存一致性
Using Interlocks for thread synchronization and maintaining cache coherency
如果我要使用某种算法,该算法对C++中的一个变量使用InterlockCompareExchange操作来确定一组数据是否由特定线程写入(通过创建我自己的小锁),那么如果数据存储在,i7上的2级缓存。
我知道缓存一致性是用来保持多核处理器缓存中数据的一致性的,但当一个核心使用互锁功能更新变量,缓存检查并修复一致性问题,而另一个核心正在检查自己缓存中的变量时,在很短的时间内该怎么办?如果我确保具有InterlockCompareExchange操作的变量是可变的,以便将更改直接写入内存,这个问题会得到解决吗?我是否正确地认为内存屏障(VS上的MemoryBarrier())不能确保缓存一致性,而只能确保不需要的指令重新排序?
我希望我的问题不要太含糊。如果我是的话,我会尽力回答任何评论。我没有任何关于这个问题的源代码可以发布,因为我没有任何具体的问题,但我想知道是否有任何问题,特别是c++0x作为其标准库的一部分具有互锁,以供将来参考。
谢谢。
编译器不能在互锁函数调用中重新排序加载或存储,并且实现将包括所需的任何机器指令,以确保CPU核心不会。
缓存一致性始终得到维护,您唯一需要担心的是,当值实际从指令管道写入缓存时,这是一个排序问题。
相关文章:
- 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进行线程同步并保持缓存一致性
- 锁保护数据的缓存一致性