如何确保部分代码仅由一个线程运行(在openmp中)

时间:2013-12-23 17:21:33

标签: c++ multithreading openmp

我有一个函数,我需要确保在调用它时,它只在一个线程上运行。所以我的功能是这样的:

 int ReadValue(int position)
 {
    // read data from a file 
 }

可以从其他函数中调用此函数,这些函数可能在某个阶段属于openmp parallel for。

我想确保它只在一个线程上运行,如果以并行方式调用它。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

这是一个完整的例子(在8个核心/线程上测试):

#include <omp.h>

static int counter = 0;
int ReadValue(int position)
{
    // read data from a file one thread at a time
#pragma omp critical
    {
        // critical section code goes here
        ++counter;
    }

    return counter;
}

int main() {
    const int count = 1 << 20;
    // loop and raise protected counter
#pragma omp parallel for
    for (int i = 0; i < count; ++i) {
        ReadValue(i);
    }

    // if counter was properly protected nothing will be printed.
    if (ReadValue(0) != count + 1)
        printf("failure!");
    return 0;
}