C++ OpenMP 锁定结构

C++ OpenMP lock istruction

本文关键字:结构 锁定 OpenMP C++      更新时间:2023-10-16

我是使用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 指令指定一次只能由一个线程执行的代码区域。

你可以这样做。

#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/