0

在我的代码中,我使用一个简单的 int 变量(名为 counter)来同步 4 个线程。

这是我的代码片段:

int counter = 0;
#pragma omp parallel shared(counter) num_threads(4) 
{
    while(counter != thread_id){
        // What should I put here?
    }
    // Actions needed to be performed 'in order'
    counter++;
    // The rest of the code
}

我面临的问题是,如果我使用 -O3 优化标志,则编译代码中的 while 循环“消失”......例如,如果我在循环中放置了 printf 行,则会发生 while 并且一切正常。 ..

我应该在我的 while 循环中放什么,这样 -O3 才不会影响它的行为?

- - 编辑 - -

抱歉缺少上下文......我需要创建在特定处理器上工作的线程团队,因为我正在使用 NUMA 系统,所以我需要“团队创建”部分,以便我可以使用处理器亲和性.. .请看这个相关的问题: Specific thread order in C using GCC and OMP

4

1 回答 1

2

如前所述,这是同步线程的一种不好的方法。由于我不希望我的回答被否决,我将解释您应该使用其他形式的同步。通常,信号量用于计算事物,因此这可能是正确的做法,但由于我们没有您的所有代码,因此没有特别好的方法来判断。

于 2013-01-05T19:43:29.760 回答