一起来学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提供的互斥函数。
相关文章推荐
- 一起来学OpenMP(7)——线程同步之临界区
- 一起来学OpenMP(7)——线程同步之临界区
- 一起来学OpenMP(9)——线程同步之事件同步机制
- 一起来学OpenMP(8)——线程同步之互斥锁函数
- 一起来学OpenMP(9)——线程同步之事件同步机制
- OpenMP 线程同步之临界区
- 一起来学OpenMP(6)——线程同步之atomic
- 一起来学OpenMP(6)——线程同步之atomic
- 一起来学OpenMP(8)——线程同步之互斥锁函数
- 一起来学OpenMP(9)——线程同步之事件同步机制
- 一起来学OpenMP(6)——线程同步之atomic
- 一起来学OpenMP(6)——线程同步之atomic
- Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
- 【代码】Visual C++线程同步技术剖析:临界区,事件,信号量,互斥量
- Delphi线程同步(临界区、互斥、信号量,包括详细代码)
- Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
- 临界区,互斥量,信号量,事件的区别(线程同步) 收藏
- 线程同步-临界区
- 线程同步-临界区对象
- 一起来学POSIX thread 之 不变量、临界区、谓词