gpt4 book ai didi

multicore - volatile 变量和多核线程同步!

转载 作者:行者123 更新时间:2023-12-02 18:56:55 24 4
gpt4 key购买 nike

我有几个并发执行的线程并检查它们自己的对象中的字段值。该字段由启动线程设置,如下所示:

for (i = 0; i < ThreadCount; i++)
{
ThreadContext[i].MyField = 1;
}

在每个线程中,我检查该值的值:

if (MyField == 1)
{
...//do something
}

但是,我注意到在 4 核 CPU 上,某些 (4) 正在运行的线程需要几毫秒甚至更长的时间才能看到更改后的 MyField。 MyField 是单个字符字段。似乎正在发生的情况是,当检测到更改的第一个线程使内存总线达到最大时,所有其他线程可能几乎在第一个线程运行的整个持续时间内停止。 (假设有足够的内存压力)。只有当第一个线程减少内存占用(并且对寄存器执行更多操作)时,其他线程也才能看到新值。

我检查了asm,这里的方式没有编译器优化。调用直接进入内存。如何解决这个问题?

谢谢!果酱

最佳答案

我收到了英特尔的反馈:是的,这就是它的工作原理(不容易修复)。

关于multicore - volatile 变量和多核线程同步!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6108160/

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