1

我有一个从文件描述符读取数据的线程,select()用于阻塞直到数据可用。当程序需要终止时,我需要关闭线程,但是它在选择时被阻塞。

我的问题是,通过关闭文件描述符来通知线程我打算终止的意图是一个好习惯吗?

有没有更好的方法来通知线程?我知道总是可以选择使用信号,但是我在某些地方读到信号pthreads不能很好地协同工作。

4

2 回答 2

5

好吧,您可以使用管道,并将其添加到您的读取集中。当线程应该终止时,在管道上发送一个字节。

或者select通话超时,超时时检查终止标志。

于 2013-04-02T06:26:38.157 回答
0

除了Joachim提出的温和方式之外,还有一些粗略的方法可以“中断”阻塞select()

  • 用于pthread_kill()向阻塞线程发送信号并在有问题(EINTR == errno)之后进行测试select()
  • 调用pthread_cancel()线程 ID。select()属于默认取消点的集合。

这两种方法都应被视为最后的解决方案。

于 2013-04-02T06:33:17.073 回答