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

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

  (2012-03-04 12:44:18)
转载

一、引言

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

 

二、临界区声明方法

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

{

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

}

 

例如:

#prgama omp critical (a)

a = b + c;

 

三、示例

[cpp]   view plain copy print ?
  1. #include <iostream>  
  2. #include <omp.h> // OpenMP编程需要包含的头文件  
  3.   
  4. int main()  
  5. {  
  6.     int sum = 0;   
  7.   
  8.     std::cout << "Before: " << sum << std::endl;  
  9.   
  10. #pragma omp parallel for  
  11.     for (int i = 0; i < 100; ++i)   
  12.     {  
  13. #pragma omp critical (a)  
  14.         {  
  15.           sum = sum + i;  
  16.           sum = sum + i * 2;  
  17.         }  
  18.     }  
  19.   
  20.     std::cout << "After: " << sum << std::endl;  
  21.     return 0;  
  22. }  

 

四、小结

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

你可能感兴趣的:(一起来学OpenMP(7)——线程同步之临界区)