OpenMP C和C++ cout/printf不提供相同的输出

dar*_*ght 2 openmp

我是OpenMP中的一个完整的菜鸟,刚刚开始探索下面的一些简单的测试脚本.

#pragma omp parallel
    {
        #pragma omp for
            for(int i=0;i<10;++i)
            std::cout<<i<<" "<<endl;
         //   printf("%d \n",i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了C和C++版本,C版本似乎工作正常,而C++版本给我一个错误的输出.

Ben*_*rel 5

printf获取锁的许多实现确保每个printf调用不被其他线程中断.

相反,std::cout重载<<运算符意味着(即使有锁)一个线程的打印i' ''\n'另一个线程的输出交错,因为C++编译器std::cout<<i<<" "<<endl;将其转换为三个operator<<()函数调用.