我有一个函数,我需要确保在调用它时,它只在一个线程上运行。所以我的功能是这样的:
int ReadValue(int position)
{
// read data from a file
}
可以从其他函数中调用此函数,这些函数可能在某个阶段属于openmp parallel for。
我想确保它只在一个线程上运行,如果以并行方式调用它。
我该怎么做?
答案 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;
}