生如夏花的博客

专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等

多线程环境下信号处理

多线程环境下需要使用互斥量等数据来进行线程间数据同步,然而同时使用同步对象与信号处理很容易造成死锁,本文探索如何在多线程环境下来进行信号处理。

在多线程环境中,为了防止信号中断线程,通常把信号加到每个线程的信号屏蔽字中。然后安排专用线程来处理信号

信号集及相关函数

信号集sigset_t)是表示多个信号的数据类型。

不同的信号编号可能会超过一个整型量的位数,所以不能用整型量中的一位代表一个信号。

POSIX.1定义数据类型sigset_t用以表示信号集,并定义了信号的操作函数。

可靠信号

可靠信号的处理有两个过程如下:

  1. 信号产生:当这些事件(硬件异常(如除以0)、软件条件(如alarm定时器超时)、终端产生的信号或调用kill函数)发生时,内核会为进程产生一个信号,同时在进程表中设置一个标志。
  2. 信号递送:内核使目标进程对该信号作出反应称为信号递送:或是改变目标进程的执行状态(默认动作),或是开始执行信号处理程序,或两者都是。

信号概述

信号是软件中断。

信号提供了一种处理异步事件的方法。

信号用于大多数复杂的应用程序中。

Unix系统的早期版本就已经提供了信号机制,但不可靠。POSIX.1对可靠信号例程进行了标准化。