我对 OpenMP 还很陌生,所以这可能有一个简单的答案,但我一直没能找到它。
假设我有以下 C 代码并希望使用 OpenMP 将其并行化。A 是一个对象数组,其中一些 double 值小于 1 buckets 是一个链表数组,并且 append 将一个指向对象的指针添加到链表的末尾。
#pragma omp for
for (i = 0; i < n; ++i) {
x = (int) (A[i].val * NUM_BUCKETS);
append(&A[i], buckets[x]);
}
问题是多个线程可能试图一次将项目附加到给定的存储桶。我可以使附加语句变得至关重要。但是,在我的应用程序中,我可能会有大约 1000 个桶,因此大部分时间线程将在不同的桶上运行。
有没有办法对存储桶的各个元素强制执行锁定?或者其他一些处理方式?