C++ OpenMP 锁定指令

C++ OpenMP lock istruction

我是 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;
 }

在该锁之前使用 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/