首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何处理n个不同的OpenMP临界区?

如何处理n个不同的OpenMP临界区?
EN

Stack Overflow用户
提问于 2017-09-23 10:01:12
回答 1查看 175关注 0票数 0

假设我有n队列。我也有n线程。每个线程可以入队到任何n队列。如何确保每个队列在任何时候都被最多一个线程访问?

如果只有1个队列,我会将入队操作放在critical部分中。然而,我不能在这里这样做,因为将所有入队操作放在critical段中将意味着线程4将无法写入队列6,因为线程7正在写入队列9。这将导致较差的性能。

我想知道我是否可以并行化所有入队操作,以便每个队列本身最多由一个线程写入。(本质上,在每个队列索引上都有一个锁;但我想在OpenMP中用惯用法来实现这一点。)

EN

回答 1

Stack Overflow用户

发布于 2017-09-23 22:40:55

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#pragma omp critical(somename)

在临界区somename中有一个线程不会阻止另一个线程同时进入临界区othername。未命名的临界区只是一个特例,等同于使用一些不透明的系统特定名称命名该节。

对于其他一切,都有简单而整洁的锁。有关更多信息,请参见OpenMP specification中的3.3节锁定例程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46378362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文