中止 Linux 上的阻塞读取

Nil*_*nck 4 linux io pthreads

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

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

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

Linux 上有什么机制可以中断阻塞读取吗?

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

mar*_*k4o 5

如果您只想让信号影响读取,请使用pthread_sigmask()将信号阻止直到读取之前,然后再次阻止它。