c - OpenMP线程,如何正确使用omp原子子句?

标签 c multithreading ubuntu parallel-processing openmp

我正在尝试并行一个从文件中成对重复读取字符串的程序。我想使用 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/

相关文章:

c - 程序应该终止并找到平均值

c - 过程编程中的 GOTO、CONTINUE、BREAK,它们如何影响状态?

安卓 : background thread

c++ - 在 C++11 中通过对 std::thread 的引用传递对象

python - Odoo 模块找不到 python 库

c - 存储负数

c - 在 C 语言中使用 setenv()

java - 通过配置文件初始化 "singleton"是否合适?

ubuntu - 更改 platformio-ide-terminal 中文件夹的颜色

linux - 在 bash 脚本中重新加载环境变量