如何处理n个不同的OpenMP关键部分?

时间:2017-09-23 10:01:12

标签: c multithreading queue openmp

说我有n个队列。我也有n个帖子。每个线程可以排队到任何n队列。如何确保每个队列最多只能访问一个队列?

如果它只是一个队列,我将排队操作放在critical部分。但是,我不能这样做,因为将所有入队操作放在critical部分中意味着线程4将无法写入队列6,因为线程7正在写入队列9。这将导致表现不佳。

我想知道我是否可以并行化所有排队操作,以便每个队列本身最多由1个线程写入。 (基本上,锁定每个队列索引;但我想在OpenMP中以惯用方式执行此操作。)

1 个答案:

答案 0 :(得分:0)

对于保护对静态对象集的访问的简单情况,可以命名OpenMP critical部分:

#pragma omp critical(somename)

在关键部分somename中使用线程不会阻止另一个线程同时进入关键部分othername。未命名的关键部分只是一种特殊情况,相当于使用一些不透明的系统特定名称命名该部分。

其他一切都有简单和可嵌套的锁。有关更多信息,请参阅OpenMP specification中的第3.3节锁定例程