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