Can std::atomic be safely used with OpenMP

atomic, c++, c++11, openmp, stdatomic

Solution

Officially, no. In practice, probably.

Page Section 1.7 page 32 of the OpenMP 5.0 Specification says:

While future versions of the OpenMP specification are expected to address the following features, currently their use may result in unspecified behavior.

Concurrency

Additions to the standard library

C++11 Library

However, depending on the implementation of the OpenMP runtime you use, it might be alright. In fact, the LLVM OpenMP runtime even uses `std::atomic` to implement some of the OpenMP specification.

The safest option though is to stick with using only what OpenMP provides. Anything you can do using `std::atomic` you should also be able to achieve using only OpenMP.

Problem

I'm currently trying to learn ow to use OpenMP and I have a question. Is it safe to do something like that : ``` std::atomic<double> result; #pragma omp parallel for for(...) { result+= //some stuff; } ``` Or shall I use : ``` double result; #pragma omp parallel for for(...) { double tmp=0; //some stuff; #pragma omp atomic result+=tmp; } ``` Thanks ! Edit : I know the most simple way to handle that is using an array, but Im asking because I'm curious

Original source

Related problems