您的位置:首页 > 运维架构

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

2013-09-10 18:17 549 查看


一起来学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 plaincopyprint?

#include <iostream>

#include <omp.h> // 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提供的互斥函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: