杀死一个被阻止的Boost :: Thread

mmo*_*cny 20 c++ iostream boost-thread

我正在编写一个阻止两个输入的应用程序istreams.

从两者中读取istream是同步(阻塞)调用,因此,我决定创建两个Boost::threads来进行读取.

这些线程中的任何一个都可以到达"结束"(基于接收的一些输入),并且一旦达到"结束",两个输入流都停止接收.不幸的是,我不知道哪个会这样做.

因此,我不能join()在两个线程上,因为只有一个线程(不能预定哪一个)将实际返回(解除阻塞).

我必须以某种方式强迫对方退出,但它被阻止等待输入,所以它本身不能决定是时候返回(条件变量或什么不是).

他们是一种方式:

  • 发送信号boost :: thread,或
  • 强迫istream"失败",或
  • 杀死Boost ::线程?

注意:

  • 其中之一istreams就是cin
  • 我正在尝试重新启动该过程,因此我无法以禁止重置它们的方式关闭输入流.

编辑:

  • 我知道什么时候到达"结束",我知道哪个线程已成功完成,哪些线程需要被杀死.它是我需要弄清楚的杀戮(或者从istream中读取的不同策略).
  • 我需要两个线程退出并正确清理:(

谢谢!

Gre*_*ers 4

我认为没有办法跨平台执行此操作,但 pthread_cancel 应该是您正在寻找的。使用 boost 线程,您可以从线程获取native_handle ,并在其上调用pthread_cancel。

另外,更好的方法可能是使用 boost asio相当于对多个文件进行 select 调用。这样,一个线程将被阻塞等待输入,但它可能来自任一输入流。我不知道用 iostreams 做这样的事情有多容易。