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

OpenMP 线程同步之临界区

2014-03-21 17:52 309 查看
多核/多线程编程中肯定会用到同步互斥操作。除了互斥变量以为,就是临界区。

临界区是指在用一时刻只允许一个线程执行的一段用{...},包围的代码段。

在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基本就是不确定的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: