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