基于原子的锁,用于线程安全使用元素

时间:2014-11-13 15:22:21

标签: c openmp atomic flush

我想创建一个并行执行的线程安全例程(使用OpenMP)并访问多个元素。元素基本上是带有几个变量和数组的结构。线程可以从几个点访问这些元素。我有多个(变量号)数组,指向程序中的元素。因此,一个线程T1可能通过一个数组A1访问一个元素E,另一个线程T2通过另一个数组A2访问同一个元素。

我想做的是创建以下结构:

//try to use element E in array 1     

#pragma omp flush(array1[E]->lock)
   if(!array1[E]->lock){
      array1[E]->lock = 1;

      ...//use (either read, write or both) element

      array1[E]->lock = 0;
      #pragma omp flush(array1[E]->lock)
   }

这在理论上是否安全?我可以忽略其他线程正在使用的元素,因为我的算法最终会再次访问它们。如果我失败了,我继续前进(我不想被卡住直到使用线程释放元素)。

0 个答案:

没有答案