在linux上中止阻塞读取

时间:2011-03-06 16:43:32

标签: linux io pthreads

我在一个线程中运行的linux中有一个阻塞读取。

在程序关闭期间,我想打破这个读取的线程。不幸的是,我无法使用轮询或选择并编写正确的代码,因为从中读取的文件是不实现轮询/选择功能的设备驱动程序。

作为临时解决方案,我目前通过pthread_kill向线程发送SIGUSR1信号并从处理程序调用pthread_exit。这会杀死线程并且到目前为止工作,但我对解决方案不满意,因为信号可能发生在任何地方,而不仅仅是在读取内。

是否有任何机制可以在linux上中断阻塞读取?

顺便说一下 - 我尝试从另一个线程关闭文件句柄,希望这会产生一些IO错误。不幸的是,这个简单的解决方案根本没有用。

1 个答案:

答案 0 :(得分:4)

如果您只希望信号影响读数,请使用pthread_sigmask()将信号阻止,直到读取之前,然后再将其阻止。