如果我使用某种算法,该算法对C++中的一个变量执行InterlockCompareExchange操作,以确定某一特定线程是否正在写入一组数据(通过创建我自己的小锁),如果数据存储在i7上的二级缓存中,我如何确保更新该值的互锁操作立即被另一个线程看到。
我知道缓存一致性是用来保持跨多核处理器缓存的数据一致性的,但是当一个内核使用互锁函数更新一个变量,而另一个内核正在检查它自己缓存中的变量时,缓存检查并修复一致性问题,这会怎么样呢?如果我确保执行InterlockCompareExchange操作的变量是易失性的,以便将更改直接写入内存,这个问题会得到解决吗?我认为VS上的内存屏障(MemoryBarrier() )不能确保缓存一致性,而只能确保不需要的指令重新排序,这是正确的吗?
我希望我的问题不是太模糊。如果我是,我会尝试回答任何评论。我没有任何源代码可以发布这个问题,因为我没有任何具体的问题,但想知道未来是否会有任何问题,特别是与c++0x的互锁作为其标准库的一部分。
谢谢。
发布于 2011-07-01 10:33:49
编译器不能跨互锁函数调用重新排序加载或存储,并且实现将包括所需的任何机器指令,以确保CPU核心不会。
高速缓存一致性始终保持,您唯一需要担心的是何时将值从指令流水线写出到高速缓存,这是一个排序问题。
https://stackoverflow.com/questions/6543035
复制相似问题