簡體   English   中英

如何使用TBB / OpenMP鎖定數組元素

[英]How to lock element of array using TBB/OpenMP

我有幾個線程讀/寫的很大的數組。 每個線程一次只能寫入其中一個元素,因此鎖定整個數組是一個壞主意。 我期望的是像

// before threads
lock_t Lock[NUM_THREADS]; 

...

// during threads
get_lock(Lock[thread_id], element_id);
array[element_id]+=10; // some operations
release_lock(Lock[thread_id]);

所以我的問題是,設計get_lockrelease_lock的最佳策略是什么?

使用OpenMP時,您可以使用atomic構造獲得等效的行為:

// during threads
#pragma omp atomic
array[element_id]+=10; // some operations

只是為了讓您了解其語義,以下是OpenMP 3.1標准的摘錄:

原子構造可確保以原子方式訪問特定的存儲位置,而不是將其暴露給可能導致不確定值的多個同時讀取和寫入線程的可能性

另一方面,如果您決定使用Intel TBB,則可以看一下原子模板類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM