一、 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)
需要任务线程任务调度时再详叙。