我對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鎖定原語。 –