首页 > 解决方案 > 这段代码打印 x 的值在 5000 左右,但不是 10000,这是为什么呢?

问题描述

我编写的这段代码创建了 2 个线程和一个迭代 10000 次的 for 循环,但最后 x 的值接近 5000 而不是 10000,为什么会发生这种情况?

#include<unistd.h>
#include<stdio.h>
#include<sys/time.h>
#include "omp.h"
using namespace std;
int x=0;
int main(){
    omp_set_num_threads(2);
    #pragma omp parallel for
        for(int i= 0;i<10000;i++){
            x+=1;
        }
    printf("x is: %d\n",x);
}

标签: c++parallel-processingopenmp

解决方案


x不是原子类型,在不同的线程中读写。(认为​​这int是原子类型是一种常见的误解。)

因此,您的程序的行为是未定义的。

使用std::atomic<int> x;是解决方法。


推荐阅读