OpenMP:用锁替换关键部分

时间:2019-03-10 21:35:12

标签: c++ parallel-processing locking openmp critical-section

如何用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);

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

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

1 个答案:

答案 0 :(得分:1)

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