【发布时间】:2021-12-23 08:14:03
【问题描述】:
我有一个函数,它只打印调用它的线程 ID。我想要 2 个线程调用这个函数 轮流 n 次。我已经用条件变量在 pthreads 中实现了这个功能,但它太冗长了。我希望程序打印如下:
id: 0
id: 1
id: 0
id: 1
id: 0
id: 1
...
最后,“id:0”和“id:1”应该打印n次。
执行此 OpenMP 的惯用方式是什么?
【问题讨论】:
-
一个有趣的思考问题,但需要注意的是,像这样对线程进行排序是对线程的毫无意义的使用。听起来你的条件变量技巧是一个很好的技巧。也许您应该将其展示给我们,以便我们为您找到简化它的方法。也有可能您认为“过于冗长”的内容已达到预期效果。
-
其实这个问题对我来说不是很清楚,minimal reproducible example 会很好
-
虽然这是一个非常有趣的谜题,但它确实有点像 X/Y 问题。交替线程听起来像是您选择解决一些我们不知道的同步挑战的方式,但可能有更好的方式来解决这个潜在目标。可以分享更多上下文吗?
-
我目前正在构建一个基准,用于测量从 2 个不同线程修改变量时的延迟,每个线程轮流,总共 n 次。在基准测试的每次运行中,线程都绑定到不同的核心对,我正在比较所有运行的延迟。
-
@AydinÖzcan 谢谢你。如果我正确理解你想要做什么,我的直觉是同步机制很容易主导基准测试,这可能是少数几个疯狂的自旋锁会给出更准确结果的情况之一。也许像gcc.godbolt.org/z/3Pjhhd3e8
标签: c++ c parallel-processing openmp