(以下均为《linux/UNIX 系统编程手册》中的部分笔记分享,和整理)
如果想要掌握多线程的编程方法,掌握信号量的学习尤为重要
首先第一点 ,还是对基础语义部分的理解,什么是信号:
信号是事件发生时对进程的通知机制
什么意思:
这明显就是交通信号灯吗,多个车流,如果不用交通信号灯进行调节,就很容易的撞在一起,当多个车流相遇时,就得靠,不同的信号标识区分,不同的车流(实际上是一种 软件中断的方式)
既然是一种软件中断的方式,那么都可以处理哪些交通事故呢
第一条:当硬件发生异常时,什么访问了无效的内存呀,异常的机器指令啥的,都会发生硬件异常,这是时候,就会产生一个信号量,报告给内核,然后再由内核告诉,发生异常的线程,你可以退下了,然后线程就异常退出(一般做,驱动的异常中断处理,报告错误 )
第二条: 当用户输入中断运行的组合键位时,比如说是“CTRL-C”的使用 或者 “CTRL-D”的使用,也会产生一个信号量,顺序是一样的,先内核,在由内核去通知这个线程,so,整个进程都会强制退出了
第三条 :发生了软件事件,就是各种不靠谱的退出和异常,都可以归结为发生了,软件事件
在 <signal.h>中有着很详细的对这些整数做了定义 ,有需要自行查看 ,都有哪些情况会产生信号
信号的类型和默认行为:
Linux 中 标准信号的 编号为1~31,对同义的信号的声明,不做讲解,(使用的范围很大,所以知道有31个这样的信号就可以,建议做一个字典程序,可以随时查询使用这些信号,方便代码的阅读 )
这些信号类型呢 ,太多了,我按照我的理解说一下,他们出现的大概原因,还是按照交通灯的理解,出了多个事故,但是每个事故是有不同类别的,什么非法的运算操作,访问了非法的地址呀 ,等等不靠谱的事儿,我可以做一个 摘抄大家看一下这些类别都有什么 ,在我的理解 里面,一是可以用来做线程的调度使用,二是可以作为线程自我保护的一个依据,比如:linux的系统日志就是这样的一个守护进程,负责记录,所有的违法记录,和最佳市民 :
一般情况下,大家需要关注的是core,出了日志,意外,最快的可以快速定位,程序出错的方法
这些值