如何取消阻塞调用,例如select()或read()?

时间:2011-08-10 20:00:26

标签: multithreading select blocking interrupt

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

在这些情况下,你应该使用一个小的或立即超时,并有额外的逻辑来处理下次选择/读取尝试的时间/方式/原因。