linux - 在 Linux 上中止阻塞读取

标签 linux io pthreads

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

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

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

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

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

最佳答案

如果只想让信号影响读取,使用pthread_sigmask()保持信号阻塞直到读取之前,然后再次阻塞。

关于linux - 在 Linux 上中止阻塞读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211834/

相关文章:

linux - 如何使用appimage部署qt5应用

python - 在python中为网站构建搜索引擎的简单方法是什么

python - 为什么 `with open()` 更适合在 Python 中打开文件?

java - 如何强制java OutputStreamWriter实际写入单个字节?

linux - ioread32 后跟 iowrite32 没有给出相同的值

c++ - 是否可以向特定 pthread ID 发送信号?

regex - 如何在 zgrep/zcat 命令中指定正则表达式?

php - 如何在 Linux 中启用核心 PHP 扩展?

c - 实现简单的多线程程序的基本信号量

c - 为什么我们需要在 pthread_cond_wait 之前进行条件检查