终止阻塞的pthreads线程

时间:2013-04-02 06:21:15

标签: c++ c linux pthreads file-descriptor

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

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

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

2 个答案:

答案 0 :(得分:5)

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

select来电超时,超时检查终止标志。

答案 1 :(得分:0)

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

  • 使用pthread_kill()向阻止线程发送信号,并在问题(EINTR == errno)之后测试select()
  • 在thread-id上调用pthread_cancel()select()属于默认取消点集。

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