一起来学OpenMP(7)——线程同步之临界区
(2012-03-04 12:44:18)一、引言
上一节介绍了OpenMP中atomic互斥锁机制的使用用法,本节介绍临界区互斥锁机制的使用用法。这里的临界区与Windows下的CriticalSection类似。
二、临界区声明方法
#pragma omp critical [(name)] //[]表示名字可选
{
}
例如:
#prgama omp critical (a)
a = b + c;
三、示例
- #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提供的互斥函数。