Openmp补遗之同步

一、 atomic编译指导语句

指定特殊的存储单元将被原子地更新,不允许多个线程同时执行更新操作。

如果不写,其结果将不可预料。谨之慎之


二、critical编译指导语句

临界区声明方法

#pragma omp critical [(name)] //[]表示名字可选

{

//并行程序块,同时只能有一个线程能访问该并行程序块

}

critical与atomic的区别在于,atomic仅适用于上一节规定的两种类型操作,而且atomic所防护的仅为一句代码。critical可以对某个并行程序块进行防护。


三 互斥锁函数 保证了一段互斥区只被一个线程操作而不会被其他线程打扰乃至出错。


void opm_init_lock(omp_lock *) 初始化互斥器

void opm_destroy_lock(omp_lock *) 销毁互斥器

void opm_set_lock(omp_lock *) 获得互斥器

void opm_unset_lock(omp_lock *) 释放互斥器

void opm_test_lock(omp_lock *) 试图获得互斥器,如果获得成功返回true,否则返回false


四、nowait

其实for 默认有一个barrier,而加上nowait子句可以消除这个barrier。


五、barrier

利用barrier子句来显式地让程序等待处理完上一个并行区再继续。


六、 master

通过#pragma omp master 来声明对应的并行程序只由主线程完成。


七、section用来指定不同的线程执行不同的部分。


八、ordered 编译指导语句包含在循环内

通过#pragma omp ordered 来将区域内语句串行执行。


九、threadprivate编译指导语句,将一个全局文件作用域变量的属性变为在并行区为每个线程所私有,其格式如下:

#pragma omp threadprivate(list) 换行符


ps:还有 四种线程调度策略:static、dynamic、guided、runtime。 例:#pragma omp parallel for schedule(dynamic, 2)

需要任务线程任务调度时再详叙。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值