在我的代码中,我使用一个简单的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循环'dissapear'...例如,如果我在循环中放置了一个printf行,那么就会发生这种情况。工作正常......
我应该在while循环中放置什么,所以-O3不会影响它的行为?
---编辑---
很抱歉缺少上下文...我需要创建一个可以处理特定进程的线程团队,因为我正在使用NUMA系统所以我需要“团队创建”部分按顺序制作所以我可以使用处理器亲和力...请看,这个问题有关: Specific thread order in C using GCC and OMP
答案 0 :(得分:3)
如前所述,这是一种同步线程的BAD方式。由于我不希望我的回答被低估,我将解释你应该使用其他形式的同步。通常情况下,一个semphore用来计算东西,所以这可能是正确的,但由于我们没有你所有的代码,所以没有一个特别好的方法来判断。