OpenMP - 预计数据竞争情况但实际上并没有发生

OpenMP - expect data race situation but did not actually occur

我写了下面的代码,我预计会发生数据竞争,因为多个线程可能同时修改 a 并得到错误的答案。

// test.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int a = 0;

    #pragma omp paralle for
    for (int i = 0; i < 10000000; i++) {
        a = a + 1;
    }

    printf("a = %d\n", a);    // correct answer = 10000000

    return 0;
}

但输出似乎是正确的:

$ gcc test.c -std=c99 -fopenmp
$ ./a.out
a = 10000000

我已经执行了好几次了,它总是给我正确的答案。
为什么没有数据竞争发生?是巧合吗?
(我知道我应该使用 reduction 但我只是想知道为什么它在没有 reduction 的情况下仍然可以正常工作。)

你写的是 #pragma omp paralle for 而你的意思是 #pragma omp parallel for(注意 parallel 而不是 paralle)。如果你解决了这个问题,你就会看到你的数据竞争。