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