OpenMP编程学习笔记六

本文通过示例对比了在OpenMP程序中使用barrier前后的执行结果差异,阐述了barrier指令如何确保所有线程同步到达某个点,进而使得后续代码能够按预期顺序执行。

在单核多线程程序中,经常需要同步多个线程以完成任务,在这个过程中有的线程会被挂起。在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之后的代码才会被执行。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值