多线程与信号

信号与执行上下文

  • 执行过程中由系统生成的同步信号 : SIGPIPE SIGSEGV SIGPIPE
    信号会在产生异常的线程的上下文中执行

  • pthread_kill发送的同步信号
    信号会在pthread_kill指定的线程的上下文中执行

  • 其它进程发送来的异步信号 : SIGALARM SIGHUP SIGINT SIGKILL
    系统会随机选择一个线程处理信号,处理结果会影响所有线程

信号处理的方法

  1. sigaction
    sigaction可以注册用户自定义的信号处理函数。要注意的是在信号处理函数中使用多线程的同步相关的函数,结果是为定义的,所以要慎重。

  2. pthread_sigmask将信号阻塞,然后用sigwait在一个单独的线程中处理。

示例代码

github: https://github.com/wartalker/c-small-programe/tree/master/mt-signal