我开始学习OpenMP并发编程,并发现了#pragma omp atomic
指令。
我对C++11的原子操作有基本的了解,知道可以向原子操作的方法传递一个memory_order
参数。如果我理解不正确,请纠正我,但我认为这样做可以使用原子操作作为同步点,例如使用memory_order_seq_cst
。
一些较少限制的内存顺序,如memory_order_relaxed
,只确保原子操作上的操作已经同步并对其他人可见。它对其他内存更新什么也没有做。
我想知道OpenMP原子指令使用的内存顺序是什么。它只会同步访问原子操作,还是会作为内存同步点?
我的猜测是它更像memory_order_relaxed
,因为critical
在这里提供了完全的同步。
欢迎任何好的解释/信息。 谢谢。