我是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++版本给我一个错误的输出.
printf获取锁的许多实现确保每个printf调用不被其他线程中断.
相反,std::cout重载<<运算符意味着(即使有锁)一个线程的打印i和' '和'\n'另一个线程的输出交错,因为C++编译器std::cout<<i<<" "<<endl;将其转换为三个operator<<()函数调用.
| 归档时间: |
|
| 查看次数: |
1490 次 |
| 最近记录: |