我有一个简单的指令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';
}
}