我对OpenMP相当陌生,所以这可能有一个简单的答案,但我一直无法找到它。OpenMP:锁定对单个数组元素的访问权限?
假设我有以下C代码,并且想要使用OpenMP进行并行化。 A是一个具有小于1的double值的对象数组,是一个链表的数组,append将一个指针添加到链表的末尾。
#pragma omp for
for (i = 0; i < n; ++i) {
x = (int) (A[i].val * NUM_BUCKETS);
append(&A[i], buckets[x]);
}
问题是,多个线程可能试图将项目追加到给定的存储桶一次。我可以让这个附加语句至关重要。但是,在我的应用程序中,我可能会有大约1000个存储桶,所以大多数时间线程将在不同的存储桶上运行。
是否有强制锁定桶的各个元素的方法?或者处理这个问题的其他方式?
+1我完全忘了更关于OpenMP锁定原语。 –