有没有推荐的方法可以等待多个输入。例如,我希望我的程序能够从3个来源接收输入:
在线程条件下监听,例如pthread_cond_wait()
从标准输入获取数据,例如getline()
侦听套接字,例如accept()
如何最好地实现这一点?我需要为每个不同的输入源创建一个线程吗?谢谢
有没有推荐的方法可以等待多个输入。例如,我希望我的程序能够从3个来源接收输入:
在线程条件下监听,例如pthread_cond_wait()
从标准输入获取数据,例如getline()
侦听套接字,例如accept()
如何最好地实现这一点?我需要为每个不同的输入源创建一个线程吗?谢谢
不需要单独的线程等待 accept(2)
和 stdin
- 在这里使用 poll/select
。不要使用条件变量,在线程之间创建一个管道(如果我们谈论条件变量,则已经有线程),在相同的 poll
上等待它,并在事件发生时写入它。
select(2)
来监听多个文件描述符而无需使用多个线程。您可以使用pthread_cond_timedwait
等待条件变量并设置超时时间,这样您就不会等待超过特定的时间。pthread_cond_wait
/pthread_cond_timedwait
,另一个线程调用select
或其他I/O函数。pthread_cond_wait
。而是使用eventfd,这样可以使用select/poll/epoll监听多个事件。看起来,这三种不同的消息传递选项对于单个线程来说是互斥的;在等待线程条件时,单个线程如何从标准输入读取?
如果您真的不想生成三个线程,我能想到的唯一选择就是以某种方式修改或参数化线程、流和套接字库,以便参考同步对象。