OpenMP:用锁替换临界区

OpenMP: Replace critical section with locks

如何用 omp_locks 替换临界区?

我原来的临界区代码是这样的,效果很好:

#pragma omp for
for (int i = 0; i < n; i++){
    // do thread-safe pre-processing

    #pragma omp critical
    {
        // do critical section stuff
    }
}

现在我做同样的事情,但用锁代替:

omp_lock_t lock;
omp_init_lock(&lock);

#pragma omp for
for (int i = 0; i < n; i++){
    // do thread-safe pre-processing

    omp_set_lock(&lock);

    // do critical section stuff

    omp_unset_lock(&lock);
}
omp_destroy_lock(&lock);

但由于某种原因,我得到了错误的结果。我是不是做错了什么?

此外,当我尝试使用多个锁时(例如,对要写入的数组的每个元素),它似乎陷入了死锁?

粗心的错误:定义锁应该在并行块之外