一起来学OpenMP(7)——线程同步之临界区

一、引言

上一节介绍了OpenMP中atomic互斥锁机制的使用用法,本节介绍临界区互斥锁机制的使用用法。这里的临界区与Windows下的CriticalSection类似。

 

二、临界区声明方法

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

{

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

}

 

例如:

#prgama omp critical (a)

a = b + c;

 

三、示例

#include #include // OpenMP编程需要包含的头文件 int main() { int sum = 0; std::cout << "Before: " << sum << std::endl; #pragma omp parallel for for (int i = 0; i < 100; ++i) { #pragma omp critical (a) { sum = sum + i; sum = sum + i * 2; } } std::cout << "After: " << sum << std::endl; return 0; }

 

四、小结

介绍了临界区critical的用法,critical与atomic的区别在于,atomic仅适用于上一节规定的两种类型操作,而且atomic所防护的仅为一句代码。critical可以对某个并行程序块进行防护。下一节介绍OpenMP提供的互斥函数。

你可能感兴趣的:(parallel,windows,编程,c,多核编程)