OpenMP Synchronisation Construct
Synchronisation Constructs :
1. #pragma omp critical
2. #pragma omp master
4. #pragma omp barrier
1. #pragma omp critical [name]
critical 结构是一个包含 structured block 的指令。该结构一次只允许一个线程执行 structured block (region)。多个critical regions可能存在于一个并行区域中,并且可能协同工作(在所有 critical regions 中一次只有一个线程),或者单独工作(当每个 critical上construct 被指定唯一名称时,在每个structured block 中一次只有一个线程)。可选(lock)提示子句可以在指定的关键构造上指定,以在选择锁定机制时提供OpenMP运行时指导。
> 代码中可以有多个critical regions
> 有deadlock 的危险:
> 未命名的 critical regions 具有相同的系统定义名称
> 对 structured block 的限制适用于所有相同命名的关键区域
> 暗示执行的非独立性
2. #pragma omp master
> 只有住线程会执行并累block
> 比 omp single 开销更少
> master子句区域后没有有隐式的 barrier (no implicit synchronisations),需要显示添加#pragma omp barrier
#pragma omp single [data clauses]
> 只有一个线程执行block
> 这个线程不必是主线程,可以是任意的进程
> master子句区域后有隐式的 barrier