使用线程进行奇偶数打印 我遇到了这个问题,并想讨论 C++ 中的解决方案。我能想到的使用 2 个二进制信号量奇数和偶数信号量。偶数信号量初始化为 1,奇数信号量初始化为 0。
**T1 thread function**
funOdd()
{
wait(even)
print odd;
signal(odd)
}
**T2 thread function**
funEven()
{
wait(odd)
print even
signal(even)
}
除此之外,如果我的函数只生成数字并且有第三个线程 T3 将打印这些数字,那么理想的设计应该是什么?我使用了一个数组,其中奇数将放置在奇数位置,偶数将放置在偶数位置。 T3 将从该数组中读取,这将避免对该数组的任何线程安全,如果 T3 没有找到任何索引,那么它将等待该索引被填充。另一种解决方案是使用一个队列,该队列将具有一个互斥体,T1 和 T2 在插入时可以使用该互斥体。
请对此解决方案发表评论,以及如何提高效率。
编辑使问题更清楚:总体问题是我有两个生产者(T1,T2)和一个消费者(T3),我的生产者是相互依赖的。
原文由 user258367 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用条件变量