C ++ OpenMP锁定构造

时间:2016-02-16 20:26:42

标签: c++ locking openmp

我是使用OpenMP的新手,我想知道是否可以在循环中锁定单个指令。 换句话说,在for循环中我有5条指令,比如A,B,C,D和E." C"必须使用锁执行(因为它通过公共资源写入),其他结构可以并行执行。有没有办法实现这个目标?

让我用伪代码来澄清我想要实现的目标

#pragma omp parallel for
 for(int i = 0; i<size; i++){
    A;
    B;
    lock(C);
    D; 
    E;
 }

1 个答案:

答案 0 :(得分:0)

在锁定之前使用critical,这样可以确保下一行代码只由一个线程执行。 CRITICAL的定义:CRITICAL指令指定一次只能由一个线程执行的代码区域。

你可以这样做。

#pragma omp parallel for
for(int i = 0; i<size; i++){
    A;
    B;
    #pragma omp critical
    lock(C);
    D; 
    E;
}

定义来源:https://computing.llnl.gov/tutorials/openMP/