gpt4 book ai didi

c++ - 信号处理程序和库工作线程

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:16 28 4
gpt4 key购买 nike

我的应用程序的客户端代码是单线程的,但我正在使用 TCP 套接字通信库,它可能创建从客户端应用程序的角度来看应该是透明的工作线程。但是,我有一个用于捕获 SIGSEGV 错误的信号处理程序,该错误尝试打印堆栈跟踪,但现在间歇性失败。

我想知道在进程内部创建工作线程是否可能会影响信号处理程序的执行?内核可以决定在某些工作线程内执行信号处理程序吗?如果是这样,是否有某种方法可以避免这种情况发生并强制信号处理程序始终在主进程线程上执行?

最佳答案

  1. SIGSEGV 处理程序有一个固有的问题,即每个 SEGV(除了人为的示例)都是由未定义的行为(更不用说意外的行为)引起的,程序随后执行的操作同样是未定义的。或者用更通俗的律师术语来说,你不知道哪里出了问题。例如,如果您覆盖了堆,或者在 malloc() 中持有某些锁时使用 SEGV,则您的信号处理程序将无法工作。

  2. 即使在最好的情况下,让线程和信号处理程序一起工作也不容易。程序在线程化时对信号设置错误的容忍度要低得多(根据我的经验)。首先,确保您使用的是现代 API。 IE 不使用signal (2)。适当使用sigactionpthread_sigmask

  3. 请注意,某些信号(包括 SIGSEGV)会传递到进程而不是线程。

关于c++ - 信号处理程序和库工作线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257208/

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