OpenMP 线程同步之临界区
2014-03-21 17:52
309 查看
多核/多线程编程中肯定会用到同步互斥操作。除了互斥变量以为,就是临界区。
临界区是指在用一时刻只允许一个线程执行的一段用{...},包围的代码段。
在OpenMP中临界区声明方法如下:
#pragma omp critical [(name)] //[]表示名字可选
{
//需要同一时刻只能有一个线程访问的代码
}
如下面的代码:
执行结果:
可以看到,机器有8个核,启动了8个线程。如果将代码中的第13行注释掉,执行结果中的Sum基本就是不确定的。
临界区是指在用一时刻只允许一个线程执行的一段用{...},包围的代码段。
在OpenMP中临界区声明方法如下:
#pragma omp critical [(name)] //[]表示名字可选
{
//需要同一时刻只能有一个线程访问的代码
}
如下面的代码:
#include <stdio.h> #include <omp.h> int main() { int sum = 0; #pragma omp parallel printf("Hello World!!!\n"); #pragma omp parallel for for (int i = 0; i < 10000; ++i) { #pragma omp critical { sum = sum + i%7; } } printf("Sum: %d\n" ,sum); return 0; }
执行结果:
可以看到,机器有8个核,启动了8个线程。如果将代码中的第13行注释掉,执行结果中的Sum基本就是不确定的。
相关文章推荐
- 一起来学OpenMP(7)——线程同步之临界区
- 一起来学OpenMP(7)——线程同步之临界区
- 一起来学OpenMP(7)——线程同步之临界区
- [并发并行]_[线程同步]_[pthread和win32的临界区(Critical Section)比较]
- Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
- Visual C++线程同步技术剖析:临界区,事件,信号量,互斥量
- 临界区实现线程同步互斥
- 多线程学习-使用临界区进行线程同步--发布日期:2008-07-17 16:38
- Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
- C++【线程同步】-临界区同步
- (转)临界区,互斥量,信号量,事件的区别(线程同步)
- Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
- 一起来学OpenMP(8)——线程同步之互斥锁函数
- VC 线程同步 临界区
- 【Demo 0089】线程同步对象--临界区
- 基于临界区的线程同步
- Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
- 控制台下实现简单的线程同步--临界区
- 线程同步-临界区对象
- 线程同步的三种方法(互斥,事件,临界区) 之一 使用临界区对象