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


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

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

最佳答案

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

关于c++ - OpenMP:用锁替换关键部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55092647/

10-16 01:18