Openmp原子和关键

Bob*_*t88 3 c++ atomic openmp critical-section

我是openmp的新手,正在为一个学校项目玩一些东西.我试图通过使用原子而不是关键来使我的程序运行得更快.我在其中一个for循环的末尾有这段代码.

  if(prod > final_prod)
  {
    #pragma omp atomic
    final_prod = prod;
  }
Run Code Online (Sandbox Code Playgroud)

虽然当我这样做时,我得到下面的错误(如果我使用批评程序编译好)

error: invalid form of ‘#pragma omp atomic’ before ‘;’ token
     final_prod = prod;
                      ^
Run Code Online (Sandbox Code Playgroud)

从我到目前为止学到的东西,你可以使用原子而不是关键,通常可以在一些机器指令中执行.这有用吗?使用原子与关键之间的主要区别是什么?

seh*_*ehe 5

根据这里的文档,你只能使用某些语句形式的原子:

在此输入图像描述

另外,确保比较在危险中!所以我假设你不能拥有你想要的东西,但如果你有的话

if(prod > final_prod) // unsynchronized read
{
  #pragma omp critical
  final_prod = prod;
}
Run Code Online (Sandbox Code Playgroud)

它仍然是数据竞争