gpt4 book ai didi

c++ - 多线程编程如何保证执行顺序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:58 27 4
gpt4 key购买 nike

下面的多线程代码有没有问题?它总是给我不一致的结果。看起来编译器优化可能会将标志设置行移到数据处理行之前,这会导致严重的数据竞争情况。

有没有办法在不增加障碍的情况下避免这种情况?

#pragma omp parallel num_threads(16)

int tid=omp_get_thread_num();

if (tid<8)
{
copydata(arrayofPtrs[tid]);

flag[tid]=1;//flag is an array of volatile int where its initial values are all 0.

}
else
{
for (int i=0; i<100000; ++i)
{
if (flag[tid-8]==1)
{
processingdata(arrayofPtrs[tid-8]);
break;
}
else
Sleep(200);
};
};

最佳答案

您可以对处理线程使用围绕标志测试的循环,这样它们将在标志上自旋锁定,直到它被设置。但是,那部分代码看起来是顺序的,那么为什么要使用多个线程进行复制/处理呢?您可以使用线程进行复制,然后使用同一线程继续处理该 block 。

关于c++ - 多线程编程如何保证执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126778/

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