信号量:
自旋锁和信号量都是程序并发操作时解决互斥问题的基本手段。信号量是用于保护临界区的一种常用方法,它的使用方法与自旋锁类似。俩种实现机制不同,死锁的情况也各不相同。
与自旋锁相同:
只用得到信号量的进程才能执行临界区代码。
与自旋锁不同:
当获取不到自选锁量时,进程不会原地打转而会进入睡眠等待。
信号量死锁的一般情况分析:
1 递归使用:
即在同一个进程中,申请了信号量,但是在没有释放之前又再次申请,进程会一直睡眠,与自旋锁一样这种情况必定死锁。
2 进程得到信号量后阻塞,睡眠:
由于信号量在获取不到自旋锁后会进入睡眠等待,这种情况不会造成死锁。
3 中断中申请信号量:
由于信号量在获取不到自旋锁后会进入睡眠等待,中断处理函数不允许睡眠,如果睡眠,中断将无法返回。
4 中断下半部申请信号量:
中断下半部允许睡眠,这种情况不会造成死锁。
5 俩个进程相互等待资源:
例如:
进程1获得信号量A,需要信号量B,在进程1需要信号量B之前进程2获得信号量B,需要信号量A。
进程1、2因相互等待资源而死锁。
阅读(1581) | 评论(0) | 转发(0) |