繁体   English   中英

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

[英]How do I handle n different OpenMP critical sections?

假设我有n队列。 我也有n线程。 每个线程可以加入n队列中的任何一个。 如何确保每个时间最多由1个线程访问每个队列?

如果只有1个队列,我会将排队操作放在critical部分。 但是,我无法在此执行此操作,因为将所有入队操作放在critical部分将意味着线程4将无法写入队列6,因为线程7正在写入队列9。这将导致性能下降。

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

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

#pragma omp critical(somename)

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

对于其他所有内容,都有简单且可嵌套的锁。 有关更多信息,请参见OpenMP规范中的 3.3 锁定例程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM