如何用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/