首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用互锁进行线程同步并维护高速缓存一致性

使用互锁进行线程同步并维护高速缓存一致性
EN

Stack Overflow用户
提问于 2011-07-01 10:30:26
回答 1查看 1.6K关注 0票数 0

如果我使用某种算法,该算法对C++中的一个变量执行InterlockCompareExchange操作,以确定某一特定线程是否正在写入一组数据(通过创建我自己的小锁),如果数据存储在i7上的二级缓存中,我如何确保更新该值的互锁操作立即被另一个线程看到。

我知道缓存一致性是用来保持跨多核处理器缓存的数据一致性的,但是当一个内核使用互锁函数更新一个变量,而另一个内核正在检查它自己缓存中的变量时,缓存检查并修复一致性问题,这会怎么样呢?如果我确保执行InterlockCompareExchange操作的变量是易失性的,以便将更改直接写入内存,这个问题会得到解决吗?我认为VS上的内存屏障(MemoryBarrier() )不能确保缓存一致性,而只能确保不需要的指令重新排序,这是正确的吗?

我希望我的问题不是太模糊。如果我是,我会尝试回答任何评论。我没有任何源代码可以发布这个问题,因为我没有任何具体的问题,但想知道未来是否会有任何问题,特别是与c++0x的互锁作为其标准库的一部分。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-01 10:33:49

编译器不能跨互锁函数调用重新排序加载或存储,并且实现将包括所需的任何机器指令,以确保CPU核心不会。

高速缓存一致性始终保持,您唯一需要担心的是何时将值从指令流水线写出到高速缓存,这是一个排序问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6543035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档