C++ 如何配置g++;因此x++;是原子的(Ubuntu,openmp)?

C++ 如何配置g++;因此x++;是原子的(Ubuntu,openmp)?,c++,concurrency,parallel-processing,openmp,C++,Concurrency,Parallel Processing,Openmp,我有一个简单的指令coutx++不是你唯一的问题。C++中的流不是线程安全的,所以必须在关键部分中封装IO。这也将利用x不是原子的问题 #include <iostream> #include <unistd.h> int main() { int x = 0; #pragma omp parallel for for(int i = 0 ; i < 10; ++i) { // Do work usleep(100000);

我有一个简单的指令
cout
x++
不是你唯一的问题。C++中的流不是线程安全的,所以必须在关键部分中封装IO。这也将利用
x
不是原子的问题

#include <iostream>
#include <unistd.h>

int main()
{
  int x = 0;

  #pragma omp parallel for
  for(int i = 0 ; i < 10; ++i)
  {
    // Do work
    usleep(100000);

    #pragma omp critical
    std::cout << x++ << '\n';
  }
}
#包括
#包括
int main()
{
int x=0;
#pragma-omp并行
对于(int i=0;i<10;++i)
{
//工作
美国LEEP(100000);
#pragma-omp-critical

std::cout Make
x
a
std::atomic
?尝试过这个方法后,仍然有一个不一致的输出,如果它是std::atomic\u size\t类型的静态成员变量,您能给我们一个错误的代码吗?您是对的,我实际上在思考了一会儿之后发现(即使x++和