如何用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);
但是由于某种原因,我得到了错误的结果。我在这里做错什么了吗?
此外,当我尝试使用多个锁(例如,要写入的每个数组元素)时,似乎陷入了死锁?
答案 0 :(得分:1)
小心的错误:定义锁应该在并行块之外