我在线程中运行的 linux 中有一个阻塞读取。
在程序关闭期间,我想将线程从读取中断开。不幸的是,我无法使用轮询或选择并编写正确的代码,因为从中读取的文件是一个未实现轮询/选择功能的设备驱动程序。
作为临时解决方案,我目前通过 pthread_kill 向线程发送 SIGUSR1 信号,并从处理程序调用 pthread_exit。这会终止线程并到目前为止有效,但我对解决方案不满意,因为信号可能发生在任何地方,而不仅仅是在读取中。
是否有任何机制可以中断 linux 上的阻塞读取?
顺便说一句 - 我尝试从另一个线程关闭文件句柄,希望这会产生某种 IO 错误。不幸的是,这个简单的解决方案根本不起作用。
最佳答案
如果只想让信号影响读取,使用pthread_sigmask()
保持信号阻塞直到读取之前,然后再次阻塞。
关于linux - 在 Linux 上中止阻塞读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211834/