multithreading之多线程服务器,信号处理。 POSIX
JustinYoung
阅读:24
2024-09-07 23:24:14
评论:0
我在处理多线程服务器中的信号处理时遇到了麻烦。我为每个连接创建一个线程,但我希望有一个选项可以使用 SIGINT 终止服务器。但是,当其中一个线程捕获到信号时,事情会变得很糟糕。除了主线程之外,有什么方法可以阻止线程获取信号吗?
请您参考如下方法:
线程从创建它的线程继承其信号掩码。
假设创建线程是“主”线程,您可能希望在创建线程之前阻塞所有有问题的信号,并在代码完成后解除阻塞创建线程中的信号。
修改线程的信号掩码 POSIX 定义 pthread_sigmask()
.
更新:
当需要在多线程环境中定期执行信号处理时,一个有趣的方法是将所有信号委托(delegate)给一个单独的线程,除了使用 sigwait()
等待信号到达外什么都不做。 .
这样做:
- 根据您要使用
pthread_sigmask()
处理的信号设置信号掩码在“主”线程之前。 - 然后创建线程来处理信号。
- 然后使用
pthread_sigmask()
在“主”线程中阻止来自1. 的所有信号|再次。 - 最后创建所有其他线程。
结果将是 1. 下指定的所有信号将转到 2.. 下创建的线程。所有其他线程将不会接收 1.. 下指定的任何信号
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。