我有一个正在处理的应用程序,需要几个辅助线程,每个线程将负责多个文件处理(至少1个,超过10个)。该文件的句柄没有在线程之间共享,因此我不必担心一个次要线程在另一个线程中封锁另一个 select查看准备读/写的内容。我要确定的是,两个辅助线程都不会导致主线程在 select/pselect 呼叫正在执行。

我想这不是问题 - 有人会想像一个网络服务器会做这些事情 - 但是当我谷歌搜索时,我找不到任何专门说“是的,您可以这样做”的东西。我假设这不会引起任何问题,我是否正确?

为了澄清,我看起来像:

  • 执行主线( select() 循环处理传入命令消息和发出的响应)

  • 辅助线程#1( select() 提供服务的循环)

  • 辅助线程#2( select() 循环提供另一个服务)

正如我之前提到的那样,在线程之间没有共享文件处理 - 它们是在单个线程中创建,使用和破坏的,而其他线程对其存在一无所知。

有帮助吗?

解决方案

不,您不必担心它们阻止主线程。我已经在各个项目中的多个线程中使用了选择。只要它们具有独特的FDSET,您就可以了,每个人都可以像独立的事件循环一样使用。

其他提示

选择不应该阻止整个过程吗?您是否尝试在插座上设置非块模式?

另外,请参阅Select_tut manpage以便一些帮助。

这是来自 select_tut manpage:

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top