非常简单的代码,无法理解为什么编译器会抛出有关我使用omp atomic capture
// my_class.h
class my_class
{
my_class()
{ }
static int class_int;
static int get_next_int();
};
// my_class.cpp
int my_class::get_next_int()
{
int next_int;
#pragma omp atomic capture
next_int = class_int++;
return next_int;
}
编译错误:
my_class.cpp: In static member function 'static int
my_class::get_next_int()':
my_class.cpp:2069: error: expected end of line before 'capture'
my_class.cpp:2070: error: invalid operator for '#pragma omp atomic' before '=' token
它可能与static
有关吗?我无法想象为什么......
如果我使用pragma omp critical
代替,那么它工作正常(没有编译器错误)。
PS我在所有.h和.cpp中都有#include <omp.h>
。我像往常一样用-fopenmp
链接
答案 0 :(得分:4)
OpenMP 3.1中引入了capture
子句。您需要一个兼容的编译器:
GCC 4.4.5不支持OpenMP 3.1。它只支持OpenMP 3.0。
答案 1 :(得分:0)
如果您使用的是Microsoft编译器,则它不支持omp atomic
指令的clauses。
将代码更改为#pragma omp atomic
,根据ms文档,编译器会做正确的事情。让我持怀疑态度。 :)