我是使用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;
}
答案 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;
}