我正在编写一个阻止来自两个输入的应用程序istreams
。
从任何一个读取istream
都是同步(阻塞)调用,因此,我决定创建两个Boost::thread
s 来进行读取。
这些线程中的任何一个都可以到达“结束”(基于接收到的一些输入),一旦到达“结束”,两个输入流都会停止接收。不幸的是,我不知道哪个会这样做。
因此,我不能join()
同时处理两个线程,因为只有一个线程(无法预先确定哪个线程)将实际返回(解除阻塞)。
我必须以某种方式强制对方退出,但它在等待输入时被阻塞,所以它不能自己决定是时候返回(条件变量或其他)。
他们是一种方法吗:
- 向 boost::thread 发送信号,或
- 强制一个
istream
“失败”,或 - 杀死一个 Boost::thread?
笔记:
- 其中之一
istreams
是cin
- 我正在尝试重新启动该过程,因此我无法以禁止重置输入流的方式关闭它们。
编辑:
- 我确实知道何时到达“结束”,并且我确实知道哪个线程已成功完成,哪些需要被杀死。这是我需要弄清楚的杀戮(或从 istream 读取的不同策略)。
- 我需要两个线程正确退出和清理:(
谢谢!