c-为什么拆除这个障碍会造成比赛条件



我正在努力理解为什么需要障碍来消除竞争条件?

#include<omp.h>
#include<stdio.h>
int main()
{
int sum = 0;
#pragma omp    parallel num_threads(4)
for(int i = 0;i < 10;i++)
{
#pragma omp parallel for num_threads(4)
for(int j = 0;j < 10;j++)
{
#pragma omp critical
sum += 1;
}
// Uncommenting this barrier removes the race condition. Right now it is non-deterministic.
//       #pragma omp barrier
#pragma omp single
sum += 1;
}
printf("%d", sum);
}

没有"pragma omp barrier";,另一个线程可能同时访问"内部的相同的sum变量;pragma omp critical";部分这将导致未定义的结果。

屏障迫使所有线程完成内部for循环,然后单个线程可以继续执行最后一部分,而不会有任何竞争条件的风险。

相关内容

  • 没有找到相关文章

最新更新