Openmp并行计算问题

#include "stdio.h"
#include "omp.h"
#define NUM_THREADS 4
int main()
{
    int i, k = 100;
    omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for firstprivate(k)
    for (i = 0; i < 5; i++)
    {
        k++;
        printf("In for-loop k=%d\n", k);
    }
    printf("k=%d\n", k);
    return 0;
}

错误:正确:

为什么同样的代码vscode命令行直接生成exe运行结果不太对,正确的结果使用vs2019运行的

 

打印一下最大线程数看看

#include "stdio.h"
#include "omp.h"
#define NUM_THREADS 4
int main (int argc, const char * argv[])
{
	int i,k=100;
	int nProcessors = omp_get_max_threads();
	printf("max thread = %d\n",nProcessors);
	omp_set_num_threads(nProcessors > NUM_THREADS ? NUM_THREADS:nProcessors);
	

#pragma omp parallel for firstprivate(k)
	for(int i = 0; i < 5; i++)
	{
		k++;
		printf("In for-loop k=%d\n", k);
	}
	printf("k=%d\n", k);
	exit(0);
}

 

正确的那张图也不太正确K最终还应该为100 而不是105

根据周围人解答,这个代码书上印错了,第十一行for循环里的k++应该改为k+=i输出结果则正确。