【问题标题】:How can I cancel a blocking call such as select() or read()?如何取消阻塞调用,例如 select() 或 read()?
【发布时间】:2011-08-10 20:00:25
【问题描述】:

正如标题所说,如何从另一个线程取消阻塞调用,例如 select() 或(在串行通信和类似情况下)read()?解决此类问题的传统方法是什么?我想一个人可以使用一个小的超时,这可能会很好,但对我来说这似乎有点像 hack。

【问题讨论】:

  • 没有取消。只有超时和是否重试的决定。

标签: multithreading select blocking interrupt


【解决方案1】:

打断select(2) 的传统方式是self-pipe trick。使用描述符非阻塞和处理EAGAIN可以更好地服务于输入/输出调用。

【讨论】:

    【解决方案2】:

    在这些情况下,您可能应该使用小超时或立即超时,并有额外的逻辑来处理何时/如何/为什么进行下一次选择/读取尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2019-08-10
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多