C++ C++;OpenMP锁指令
我是使用OpenMP的新手,我想知道是否有可能在一个循环中锁定一个指令。 换句话说,在for循环中,我有5条指令,比如a、B、C、D和E。“C”必须用锁执行(因为它写在公共资源上),其他指令可以并行执行。有没有办法做到这一点 让我用伪代码来阐明我想要实现的目标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
#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;iIfC
是一个非常简单的操作(例如C++;
),请使用原子
,否则,请使用关键
区域。如果有帮助,请接受下面的答案。如果“lock()”实际上是一个简单的语句,如x+=1;您可以使用#pragma omp-atomic,它通常比关键部分更快,因为它更好地利用了硬件功能,并且通常不在内部使用锁。