【发布时间】:2011-08-10 20:00:25
【问题描述】:
正如标题所说,如何从另一个线程取消阻塞调用,例如 select() 或(在串行通信和类似情况下)read()?解决此类问题的传统方法是什么?我想一个人可以使用一个小的超时,这可能会很好,但对我来说这似乎有点像 hack。
【问题讨论】:
-
没有取消。只有超时和是否重试的决定。
标签: multithreading select blocking interrupt
正如标题所说,如何从另一个线程取消阻塞调用,例如 select() 或(在串行通信和类似情况下)read()?解决此类问题的传统方法是什么?我想一个人可以使用一个小的超时,这可能会很好,但对我来说这似乎有点像 hack。
【问题讨论】:
标签: multithreading select blocking interrupt
打断select(2) 的传统方式是self-pipe trick。使用描述符非阻塞和处理EAGAIN可以更好地服务于输入/输出调用。
【讨论】:
在这些情况下,您可能应该使用小超时或立即超时,并有额外的逻辑来处理何时/如何/为什么进行下一次选择/读取尝试。
【讨论】: