multithreading - 如何解除阻塞等待信号量的所有线程?
问题描述
我正在处理有限数组(或有限多个缓冲区)的标准生产者和消费者问题。我尝试使用信号量来实现它,但遇到了问题。我希望制片人“生产”只说 50 次。之后我希望生产者线程加入主线程。这部分很简单,但我无法做的是加入消费者线程。他们被困在没有数据的信号量上。我该如何解决这个问题?
一种可能的选择是让一个标志变量在生产者加入主线程时变为 True,之后,主线程将执行与工作线程数量一样多的 post(semaphore)。工作线程每次唤醒后都会检查标志变量,如果为真,它将退出函数。
我认为我的方法效率很低,因为有许多后信号量调用。如果我可以一次解锁所有线程,那就太好了!
编辑:我尝试实现我所说的一切,但由于死锁而不起作用
解决方案
一种选择是“毒丸”法。它假设您知道存在多少消费者线程。假设有 N 个消费者,那么生产者做完之后,将 N 个“毒丸”放入队列。“毒丸”只是一个对象/值,它与生产者通常生产的任何东西类型兼容,但与普通对象/值有区别。
当消费者意识到它吃了毒丸时,它就会死去。问题解决了。
推荐阅读
- css - React Native:呈现布局,表单居中,flex 背景
- javascript - isset() 不适用于动态形式
- python - 需要在python的networkx库中改变节点的形状
- python - 替换捕获组中的多个字符
- debugging - 如何在 Visual Studio 2019 中安装 64 位 SSIS 运行时
- python - 如何使用循环打印这些哈希符号?
- javascript - Javascript 仅在我的 html 的一部分中工作,但在其他任何地方都没有
- python - 使用列表值获取字典键
- ajax - 如何显示控制器动作返回的数据
- simulation - 球体之间的滚动接触