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

一起来学OpenMP(6)——线程同步之atomic

2014-06-08 11:16 323 查看
原文链接

一、引言

在OpenMP中,线程同步机制包括互斥锁同步机制和事件同步机制。本节介绍互斥锁同步机制中的atomic方法。

二、互斥锁同步的概念

互斥锁同步的概念类似于Windows中的临界区(CriticalSection)以及Windows和Linux中的Mutex,以及VxWorks中的SemTake何SemGive(初始化时信号量为满),即对某一块代码操作进行保护,以保证同时只能有一个线程执行该段代码。

三、atomic(原子)操作语法

#pragma opm atomic

x< + or * or - or * or / or & or | or << or >> >=expr

(例如x <<= 1; or x *=2;)



#pragma opm atomic

x++ //or x--, --x, ++x

可以看到atomic的操作仅适用于两种情况:

1. 自加减操作

2. x<上述列出的操作赴>=expr

四、示例

[cpp] view
plaincopy

#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 < 20000; ++i)

{

#pragma omp atomic

sum++;

}

std::cout << "After: " << sum << std::endl;

return 0;

}

输出20000。

如果将#pragma omp atomic声明去掉,则输出值不确定。

五、小节

本节介绍了atomic的用法,下一节介绍临界区的用法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: