OpenMP模式下多线程文件操作(三)

来源:互联网 发布:三菱plc编程方法 编辑:程序博客网 时间:2024/06/05 23:04

OpenMP --- 线程同步

1. 引言

    在OpenMP中,线程同步机制包括互斥锁同步机制和事件同步机制。

 

2. 互斥锁同步

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

 

3. atomic(原子)同步语法

    #pragma omp atomic

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

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

    或

    #prgma omp atomic

    x++ or x-- or --x or ++x

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

    1. 自加减操作;

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

 

4. 示例

   

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

 

 

5. critical同步机制

    本节介绍互斥锁机制的使用方法,类似于windows下的CriticalSection。

 

5.1 临界区声明方法

     #pragma omp critical [(name)] //[]表示名字可选

     {

           //并行程序块,同时只能有一个线程能访问该并行程序块

     }

 

     例如,

    #pragma omp critial (tst)

    a = b + c;

 

5.2 critical与atomic的区别

     临界区critical可以对某个并行程度块进行保护,atomic所能保护的仅为一句代码。

 

5.3 critical示例

       

 

 

原创粉丝点击