【发布时间】:2013-04-02 06:21:15
【问题描述】:
我有一个线程从文件描述符中读取数据,使用select() 阻塞直到数据可用。
当程序需要终止时,我需要关闭线程,但是它在选择时被阻塞。
我的问题,通过关闭文件描述符来通知线程我打算终止是一个好习惯吗?
有没有更好的方法来通知线程?
我知道总有一个使用信号的选项,但是我在某些地方读到信号pthreads 不能很好地协同工作。
【问题讨论】:
-
为什么你设置
select一直被阻塞?给它一个超时!当达到超时并且没有事件发生时,循环检查一个标志,确定它是否必须连续运行。跨度> -
如果从另一个线程关闭 FD 会发生什么?
-
Select 将在线程中返回错误代码。
-
好的,听起来不错。 Cetainly 听起来比一些引入可避免的 CPU 浪费和终止延迟的破旧的超时循环更好。好像行得通,而且是单行的。会有多少“更好”?
-
我觉得这个方法很好,但是,有人跟我说这是滥用接口。我只是想知道是否有更好的方法来做到这一点,到目前为止,我赢了...... :)
标签: c++ c linux pthreads file-descriptor