OpenMP编程学习笔记六

本文介绍了在OpenMP编程中如何使用barrier同步多线程。通过示例代码展示了未使用barrier和使用barrier时的不同运行结果,说明了barrier在确保所有线程执行完相同阶段的代码后再继续执行后续任务的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在单核多线程程序中,经常需要同步多个线程以完成任务,在这个过程中有的线程会被挂起。在OpenMP中,为了同步各个线程,需要使用barrier。

测试代码:

void testBarrier()
{
    omp_set_num_threads( 4 );
#pragma omp parallel
    {
        printf("test OpenMP 1/n");
#pragma omp barrier
        printf("test OpenMP 2/n");
    }
}

运行结果为:

test OpenMP 1
test OpenMP 1
test OpenMP 1
test OpenMP 1
test OpenMP 2
test OpenMP 2
test OpenMP 2
test OpenMP 2

如果没有使用barrier,

void testBarrier()
{
    omp_set_num_threads( 4 );
#pragma omp parallel
    {
        printf("test OpenMP 1/n");
//#pragma omp barrier
        printf("test OpenMP 2/n");
    }
}

运行结果为:

test OpenMP 1
test OpenMP 2
test OpenMP 1
test OpenMP 2
test OpenMP 1
test OpenMP 2
test OpenMP 1
test OpenMP 2

所以,当使用了barrier后,只用所有的thread执行了barrier所在处之前的最近的parrallel region代码后,

barrier之后的代码才会被执行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值