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

时间:2019-03-08 12:40:46

标签: c multithreading ubuntu parallel-processing openmp

我正在尝试并行执行一个程序,该程序从文件中成对重复读取字符串。我想使用omp原子,以确保在每个循环中都能正确读取该对。我将在代码中像这样使用它:

SELECT SUM(Time_of_Ping > NOW() - INTERVAL 24 HOUR)
FROM your_table

我的问题是,我不知道这些分类(读,写,更新,捕获)之间有什么区别,以便使用正确的分类。 getmystring(fp)是一次从文件中读取一个字符串的函数。

1 个答案:

答案 0 :(得分:1)

似乎您选择了错误的OpenMP构造。目的似乎是一次只允许一个线程在您的块中执行。这意味着该块旨在成为关键区域,用于声明该块的指令为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);
}