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