【问题标题】:aborting a blocking read on linux中止Linux上的阻塞读取
【发布时间】:2011-03-06 16:43:32
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 信号是中断阻塞读取的唯一方法。
  • 调用 pthread_exit 的信号在道德上等同于 pthread_cancel'ing 线程 fwiw(假设线程是可取消的)。 read 是一个取消点。这并不比您当前的解决方案更好,但它可能会简化一些代码。

标签: linux io pthreads


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多