Openmp锁定替代方案,允许并发读取,直到线程尝试写入?

时间:2015-11-11 06:06:20

标签: multithreading parallel-processing openmp

我想替换:

omp_set_lock(&bestTimeSeenSoFar_lock);
  temp_bestTimeSeenSoFar = bestTimeSeenSoFar; // this is a read
omp_unset_lock(&bestTimeSeenSoFar_lock);
...                
omp_set_lock(&bestTimeSeenSoFar_lock);
  // update/write bestTimeSeenSoFar
omp_unset_lock(&bestTimeSeenSoFar_lock);

代码允许多个线程一次读取变量,除非线程正在尝试写入,在这种情况下,它们会一直等到写入完成。帮助

1 个答案:

答案 0 :(得分:0)

使用这样的东西怎么样?

#pragma flush( bestTimeSeenSoFar )
#pragma omp atomic read
temp_bestTimeSeenSoFar = bestTimeSeenSoFar;

...

#pragma omp atomic write
bestTimeSeenSoFar = whatever;
#pragma flush( bestTimeSeenSoFar )

我对涉及atomic的OpenMP标准chapter 2.12.6的阅读不允许我决定这是否会完全符合您的要求,但这是我能想到的最好/最接近的。而且,即使这可能在理论上有效,它也将高度依赖于编译器中此功能的实现质量。所以它不适合你并不一定意味着这个想法是错误的。

无论如何,我会鼓励你尝试一下,请报告它是否适合你。