gpt4 book ai didi

c - 退出多线程/多进程 Web 服务器

转载 作者:行者123 更新时间:2023-11-30 14:25:55 25 4
gpt4 key购买 nike

我正在编程一个http服务器。主要守护进程生成一堆监听器,这些监听器是线程或进程,具体取决于用户设置。创建监听器后,套接字描述符将传递给它,它的工作只是监听连接(废话)。信号量正在包装对 listen 的调用,以避免惊群效应。

我的问题是如何退出服务器。在这种情况下,监听器被信号量阻塞,守护进程如何告诉它们关闭?守护进程不能直接杀死他们,也许有人正在响应请求......

我想让设计尽可能简单,但我找不到解决这个问题的方法。

这里有一些丑陋的解决方法:

  • 设置信号量的超时。醒来。我应该关闭吗?不?好的,回去 sleep ;
  • 杀了他们;
  • 共享内存中的 bool 值数组,表示响应/阻止,守护进程相应地终止。迄今为止最好的,但并不那么简单。

你说什么?谢谢。

最佳答案

解决此问题的一个简洁方法是让每个监听器等待两个信号量。第一个是您当前使用的,第二个是当收到信号时,意味着是时候退出了。我相信您的系统是 Linux,因为您使用了术语 daemon。函数 select 就是这样做的 - 等待多个对象(如文件描述符),并在其中一个对象收到信号时返回。您还可以从函数中知道哪个函数收到了信号,因此这是您的解决方案。

在 Windows 上,该函数为 WaitForMultipleObjects()

关于c - 退出多线程/多进程 Web 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com