OpenMP critical临界区

临界区用在可能产生数据访问竞争的地方,用法:#pragma omp critical (name) (name可省略)。保证每次只有一个线程进入。

注意:critical语句不允许互相嵌套

例:在一个并行域内的for任务分担域中,各个线程逐个进入到critical保护的区域内,比较当前元素的最大值得关系并可能进行最大值的更替,从而避免了数据竞争的情况。

#include <stdio.h>
#include <omp.h>
int main()
{
    int i, max_x = -1, max_y = -1;
    int arx[] = {5, 16, 87, 65, 24, 35, 9, 33};
    int ary[] = {68, 4, 98, 43, 56, 18, 54, 11};
#pragma omp parallel for
    for (i = 0; i < 8; i++)
    {
#pragma omp critical
        if (arx[i] > max_x)
            max_x = arx[i];
#pragma omp critical
        if (ary[i] > max_y)
            max_y = ary[i];
    }
    printf("max_x = %d , max_y = %d\n", max_x, max_y);

    return 0;
}
发布了673 篇原创文章 · 获赞 644 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/zhaohaibo_/article/details/90408956