C++ C++;OpenMP锁指令

C++ C++;OpenMP锁指令,c++,locking,openmp,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; } #pragma omp par

我是使用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;
 }
#pragma omp parallel for

对于(inti=0;i在该锁之前使用critical,以确保下一行代码仅由一个线程执行。 CRITICAL的定义:CRITICAL指令指定一个代码区域,一次只能由一个线程执行

你可以这样做

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

对于(int i=0;iIf
C
是一个非常简单的操作(例如
C++;
),请使用
原子
,否则,请使用
关键
区域。如果有帮助,请接受下面的答案。如果“lock()”实际上是一个简单的语句,如x+=1;您可以使用#pragma omp-atomic,它通常比关键部分更快,因为它更好地利用了硬件功能,并且通常不在内部使用锁。