我有一个应用程序需要几个辅助线程,每个线程将负责一些文件句柄(至少1个,最多10个)。文件句柄在线程之间不共享,因此我不必担心一个辅助线程在select哪些内容可以读/写时阻塞另一个线程。我想要确保的是,在执行select/pselect调用时,两个辅助线程都不会导致主线程停止执行。
我认为这不是问题——在Web服务器等地方可能会这样做——但我在谷歌上找不到任何明确说明“是的,你可以这样做”的东西。我的假设是正确的吗?
为了澄清,我的情况大致如下:
- 执行的主线程(select()循环处理传入的命令消息和传出的响应) - 辅助线程#1(select()循环提供服务) - 辅助线程#2(select()循环提供另一个服务)
正如我之前提到的,这些文件句柄没有在线程之间共享——它们在单个线程中创建、使用和销毁,并且其他线程不知道它们的存在。
我认为这不是问题——在Web服务器等地方可能会这样做——但我在谷歌上找不到任何明确说明“是的,你可以这样做”的东西。我的假设是正确的吗?
为了澄清,我的情况大致如下:
- 执行的主线程(select()循环处理传入的命令消息和传出的响应) - 辅助线程#1(select()循环提供服务) - 辅助线程#2(select()循环提供另一个服务)
正如我之前提到的,这些文件句柄没有在线程之间共享——它们在单个线程中创建、使用和销毁,并且其他线程不知道它们的存在。
select
手册中提到它会在等待文件描述符准备好(或超时)时阻塞进程。这就是为什么我想知道这是否字面意义上的(进程被阻塞),还是仅指当前执行线程。 - Willselect
命令的正确“man page”页面链接:http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html。在该页面中,除了更改历史部分外,不会发现任何有关“process”的提及。在许多系统上(如Linux),您可以安装POSIX man pages,它们将显示为man
第3p
节。这非常有帮助,因为供应商的man pages往往包含误导性信息。 - R.. GitHub STOP HELPING ICE