如何配置 g++,以便 x++ 是原子的(Ubuntu,openmp)



我有一个简单的指令cout << x++,由我的线程同时执行。我对输出进行了排序,然后做了一个 uniq-c,确实许多值的计数大于 1。所以这表明 x++ 不是原子的。怎么做到这样?

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';
  }
}

最新更新