如何使用TBB / OpenMP锁定数组元素

时间:2013-07-09 16:17:57

标签: c++ multithreading locking openmp tbb

我有一个非常大的数组读/写几个线程。每个线程一次只会丢掉它们中的一个元素,因此锁定整个数组是个坏主意。我期待的是像

// 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的最佳策略是什么?

1 个答案:

答案 0 :(得分:1)

使用OpenMP时,您可以使用atomic构造获得等效行为:

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

只是为了让您了解它的语义,这里是OpenMP 3.1标准的摘录:

  

原子构造确保特定的存储位置   原子地访问,而不是暴露它的可能性   可能导致多个同时读写线程   不确定的值

另一方面,如果您决定使用英特尔TBB,您可以查看atomic template class