是否有推荐的方法来等待多个输入。例如,我希望我的程序能够接收来自 3 个来源的输入:
监听线程条件,例如 pthread_cond_wait()
从标准输入中获取数据,例如 getline()
监听套接字,例如 accept()
实现这一目标的最佳方法是什么?每个不同的输入源都需要一个线程吗?谢谢
是否有推荐的方法来等待多个输入。例如,我希望我的程序能够接收来自 3 个来源的输入:
监听线程条件,例如 pthread_cond_wait()
从标准输入中获取数据,例如 getline()
监听套接字,例如 accept()
实现这一目标的最佳方法是什么?每个不同的输入源都需要一个线程吗?谢谢
不需要单独的线程等待accept(2)
和stdin
-poll/select
在这里使用。代替条件变量,在线程之间创建一个管道(如果我们谈论 CV,你已经有线程),在同一时间等待它,poll
并在事件发生时写入它。
您可以使用系统调用在不使用多个线程的情况下侦听多个文件描述符。select(2)
您可以使用pthread_cond_timedwait
超时等待条件变量,这样您等待的时间不会超过特定时间。
我认为想要同时等待条件变量或某种文件描述符是非常不寻常的——如果你绝对确定这是你想要做的,你将不得不使用多个线程,一个线程调用pthread_cond_wait
/pthread_cond_timedwait
和另一个线程调用select
或其他一些 I/O 函数。
在现代 Linux 上,最好的方法是根本不使用pthread_cond_wait
。只需使用eventfd,这将使您能够使用 select/poll/epoll 侦听多个事件。
看起来这三个不同的消息传递选项对于单个线程来说是互斥的。单个线程在等待线程条件时如何从标准输入读取?
如果您真的不想生成三个线程,我能理解的唯一选择是以某种方式修改或参数化线程、流和套接字库以获取对同步对象的引用。