我想创建一个并行执行的线程安全例程(使用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)
}
这在理论上是否安全?我可以忽略其他线程正在使用的元素,因为我的算法最终会再次访问它们。如果我失败了,我继续前进(我不想被卡住直到使用线程释放元素)。