我有一个从文件描述符中读取数据的线程,使用select()
来阻止,直到数据可用。
当程序需要终止时,我需要关闭该线程,但是它在select时被阻止。
我的问题是,通过关闭文件描述符来通知线程关于我终止意图是一个好习惯吗?
有没有更好的方法来通知线程?
我知道总有一个选项可以使用信号,不过我在某些地方读到的信号表明pthreads
不能很好地协同工作。
答案 0 :(得分:5)
您可以使用管道,并将其添加到您的读取集。当线程终止时,在管道上发送一个字节。
或select
来电超时,超时检查终止标志。
答案 1 :(得分:0)
除了 Joachim 提出的温和方式外,还有一些粗略的方法可供选择
“中断”阻止select()
:
pthread_kill()
向阻止线程发送信号,并在问题(EINTR == errno)
之后测试select()
pthread_cancel()
。 select()
属于默认取消点集。这两种方法都应该被视为最后的重新解决方案。