我目前正在尝试学习如何使用OpenMP,并且我有一个问题。像这样做是否安全:
std::atomic<double> result;
#pragma omp parallel for
for(...)
{
result+= //some stuff;
}
还是我应该使用:
double result;
#pragma omp parallel for
for(...)
{
double tmp=0;
//some stuff;
#pragma omp atomic
result+=tmp;
}
谢谢!
编辑:我知道处理这个的最简单方式是使用一个数组,但我问这个问题是因为我很好奇。
std::atomic
是C++11标准多线程框架提供的一种工具。如果你将std::atomic
与像OpenMP这样提供自己实现此类功能的外部库结合使用,可能会遇到问题。 - Marc Claesen