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