OpenMP与C++11不同,它从内存操作的角度(而不是从变量的角度)处理原子性。例如,它允许在编译时对存储在未知大小的向量中的整数使用原子读/写:
// non-atomic access (e.g., in a sequential region++11中,这是不可能实现的。我们可以通过放松记忆模型将原子变量作为非原子</
他们定义了一个“数据竞赛”,如下所示:
如果程序在不同的线程中包含两个相互冲突的操作,其中至少一个不是原子的,并且在另一个线程之前也不会发生,那么程序的执行就包含了一个数据竞赛。我看不出对原子变量执行非原子操作的任何直接方法。std::atomic<T> in C++没有定义任何具有非原子语义的操作。在C中,所有原子</em