说我有n
个队列。我也有n
个帖子。每个线程可以排队到任何n
队列。如何确保每个队列最多只能访问一个队列?
如果它只是一个队列,我将排队操作放在critical
部分。但是,我不能这样做,因为将所有入队操作放在critical
部分中意味着线程4将无法写入队列6,因为线程7正在写入队列9。这将导致表现不佳。
我想知道我是否可以并行化所有排队操作,以便每个队列本身最多由1个线程写入。 (基本上,锁定每个队列索引;但我想在OpenMP中以惯用方式执行此操作。)
答案 0 :(得分:0)
对于保护对静态对象集的访问的简单情况,可以命名OpenMP critical
部分:
#pragma omp critical(somename)
在关键部分somename
中使用线程不会阻止另一个线程同时进入关键部分othername
。未命名的关键部分只是一种特殊情况,相当于使用一些不透明的系统特定名称命名该部分。
其他一切都有简单和可嵌套的锁。有关更多信息,请参阅OpenMP specification中的第3.3节锁定例程。