我正在研究一个 pthread 多线程代码,每个线程都在文件描述符上调用 read()。read() 是一个阻塞调用,因此它等待数据。但我希望它只等待 3 秒来等待数据。
我曾想过使用alarm() 和hadling SIGALRM,但如果我在一个线程中发出警报,所有线程都会收到该SIGALRM 信号,并且所有线程都将放弃读取。我该怎么做?
为此使用select
电话。它有一个参数允许您指定超时。
Linux 手册页select
有一个示例用法,您可以在此处和网络上的其他地方找到很多示例。
如果您不担心便携性,还有更多现代/功能丰富的选项。
epoll
工具。手册页有示例代码,这个问题列出了几个带有其他使用信息的博客。 kqueue
. 您可能想研究库以将所有这些抽象出来。libevent值得一看,它封装了上述大多数特定于操作系统的接口。