gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:19:18 25 4
gpt4 key购买 nike

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

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

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

谢谢。

最佳答案

编译器无法通过互锁函数调用对加载或存储进行重新排序,实现将包括任何需要的机器指令以确保 CPU 核心不会这样做。

始终保持缓存一致性,您唯一需要担心的是值实际从指令流水线写入缓存的时间,这是一个顺序问题。

关于c++ - 使用 Interlocks 进行线程同步并保持缓存一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com