我有一个我正在处理的应用程序需要几个辅助线程,每个应用程序都要负责一些文件句柄(至少1个,超过10个)。文件句柄不在线程之间共享,因此当select
看到准备读/写的内容时,我不必担心一个辅助线程阻塞另一个。我想确定的是,在执行select
/ pselect
调用时,两个辅助线程都不会导致主线程停止执行。
我认为这不是一个问题 - 人们可以想象这样的事情会在网络服务器上完成 - 但我找不到任何具体的说法“是的,你可以这样做”当我谷歌搜索。我是否认为这不会导致任何问题?
为了澄清,我看起来像是:
主要执行线程(select()
循环处理传入的命令消息和传出响应)
辅助线程#1(提供服务的select()
循环)
辅助线程#2(提供另一项服务的select()
循环)
正如我之前提到的,没有一个文件句柄在线程之间共享 - 它们是在一个单独的线程中创建,使用和销毁的,其他线程不知道它们的存在。
答案 0 :(得分:5)
不,你不必担心他们阻止主线程。我在各种项目中使用了多个线程中的select。只要他们有不同的FDSETS,那么你很好,每个人都可以像独立的事件循环一样使用。
答案 1 :(得分:0)
是不是应该选择阻止整个过程? 您是否尝试在套接字上设置非阻塞模式?
另外,请参阅select_tut联机帮助页以获取一些帮助。
以下是select_tut
联机帮助页的相关部分:
So what is the point of select()? Can't I just read and write to my descriptors whenever I want? The point of select() is that it watches multiple descriptors at the same time and properly puts the process to sleep if there is no activity.