我正在尝试并行一个从文件中成对重复读取字符串的程序。我想使用 omp 原子,以确保在每个循环中都能正确读取该对。我将在我的代码中像这样使用它:
#pragma omp atomic
{
if(a = getmystring(fp)) fprintf(fpw, "A: %s\n", a);
if(b = getmystring(fp)) fprintf(fpw, "B: %s\n", b);
}
我的问题是我不知道类(读、写、更新、捕获)之间有什么区别,以便使用正确的类。 getmystring(fp) 是一次从文件中读取一个字符串的函数。
最佳答案
看来您选择了错误的 OpenMP 构造。目标似乎是一次只允许一个线程在您的 block 中执行。这意味着该 block 旨在成为一个关键区域,并且用于声明它的指令是omp critical
:
#pragma omp critical
{
if(a = getmystring(fp)) fprintf(fpw, "A: %s\n", a);
if(b = getmystring(fp)) fprintf(fpw, "B: %s\n", b);
}
关于c - OpenMP线程,如何正确使用omp原子子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55063453/