一起来学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 0; 100; ++i)   
  12.      
  13. #pragma omp critical (a)  
  14.          
  15.           sum sum i;  
  16.           sum sum 2;  
  17.          
  18.      
  19.   
  20.     std::cout << "After: " << sum << std::endl;  
  21.     return 0;  
  22.  

 

四、小结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值