使用Interlocks进行线程同步并保持缓存一致性

Using Interlocks for thread synchronization and maintaining cache coherency

本文关键字:缓存 一致性 同步 Interlocks 线程 使用      更新时间:2023-10-16

如果我要使用某种算法,该算法对C++中的一个变量使用InterlockCompareExchange操作来确定一组数据是否由特定线程写入(通过创建我自己的小锁),那么如果数据存储在,i7上的2级缓存。

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

我希望我的问题不要太含糊。如果我是的话,我会尽力回答任何评论。我没有任何关于这个问题的源代码可以发布,因为我没有任何具体的问题,但我想知道是否有任何问题,特别是c++0x作为其标准库的一部分具有互锁,以供将来参考。

谢谢。

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

缓存一致性始终得到维护,您唯一需要担心的是,当值实际从指令管道写入缓存时,这是一个排序问题。