[操作系统] - No.2 死锁、活锁,饥饿
2017-08-17 10:32
246 查看
死锁的规范定义是:如果一个进程集合中的每个进程都在等待只能由改进成几何中的其它集合才能引发的事件(释放某些资源),那么该集合就是死锁的。
死锁的四个必要条件是:
1.互斥条件:每个资源要么已经分配给一个进程,要么就是可用的
2.占有和等待:已经得到了某个资源的进程可以申请其他资源
3.不可抢占条件:一个已经被占有的资源不可以被其他资源抢占,只能由占有该资源的其他资源显式释放
4.环路等待:死锁发生时,系统中一定由两个或者两个以上的进程组成了一个环,该环路中每个进程都在等待下一个进程释放资源
所以,通俗的说,死锁进程形成了一个环,每个进程都占有了一些资源同时希望得到其他进程的一些资源来运行。当死锁发生时,所有的进程由于缺少资源就会进入阻塞状态。
活锁:我们先看一个例子
如图所示,A,B采用互斥信号量的方式访问临界资源,假设某一时刻A对资源1的信号量resource_1访问成功,即将访问资源2的信号量resource_2,;B对资源2的信号量resource_2访问成功,即将访问资源1的信号量resource_1。就形成了一个环,这个环中A希望访问2,但是由于信号量resource_2 = 0所以进入等待队列(非阻塞态),B希望访问1,但是由于信号量resource_1 = 0所以进入等待队列(非阻塞态),所以A,B一直在消耗CPU而没有继续进行后续的操作,但是这是死锁么?不是的。死锁是进程占有了资源,在缺少资源的时候进入阻塞态。但是上述A,B均没有进入阻塞态,但从现象上看好像是死锁发生了。我们称这种现象为活锁。
饥饿:当一个进程一直无法得到自己的资源而一直无法进行后续的操作时(不一定是阻塞),我们称这个进程会饥饿而死。显然,死锁和活锁都会饥饿。
死锁的四个必要条件是:
1.互斥条件:每个资源要么已经分配给一个进程,要么就是可用的
2.占有和等待:已经得到了某个资源的进程可以申请其他资源
3.不可抢占条件:一个已经被占有的资源不可以被其他资源抢占,只能由占有该资源的其他资源显式释放
4.环路等待:死锁发生时,系统中一定由两个或者两个以上的进程组成了一个环,该环路中每个进程都在等待下一个进程释放资源
所以,通俗的说,死锁进程形成了一个环,每个进程都占有了一些资源同时希望得到其他进程的一些资源来运行。当死锁发生时,所有的进程由于缺少资源就会进入阻塞状态。
活锁:我们先看一个例子
如图所示,A,B采用互斥信号量的方式访问临界资源,假设某一时刻A对资源1的信号量resource_1访问成功,即将访问资源2的信号量resource_2,;B对资源2的信号量resource_2访问成功,即将访问资源1的信号量resource_1。就形成了一个环,这个环中A希望访问2,但是由于信号量resource_2 = 0所以进入等待队列(非阻塞态),B希望访问1,但是由于信号量resource_1 = 0所以进入等待队列(非阻塞态),所以A,B一直在消耗CPU而没有继续进行后续的操作,但是这是死锁么?不是的。死锁是进程占有了资源,在缺少资源的时候进入阻塞态。但是上述A,B均没有进入阻塞态,但从现象上看好像是死锁发生了。我们称这种现象为活锁。
饥饿:当一个进程一直无法得到自己的资源而一直无法进行后续的操作时(不一定是阻塞),我们称这个进程会饥饿而死。显然,死锁和活锁都会饥饿。
相关文章推荐
- 操作系统 并发:死锁和饥饿 复习题&练习题&总结
- Java并发编程系列之十二:死锁、饥饿和活锁
- 死锁、活锁、饥饿
- 重温《并发编程实战》---死锁活锁和饥饿
- 死锁、活锁&饥饿
- 死锁&活锁&饥饿
- 高并发编程-05-活跃性问题-死锁,活锁,饥饿
- 死锁,活锁和饥饿
- 活锁 死锁 饥饿
- 《操作系统》第6章:并发:死锁和饥饿
- 死锁与活锁的区别,死锁与饥饿的区别
- 死锁,活锁和饥饿
- java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
- 死锁活锁饥饿
- 我来说说操作系统中 死锁与饥饿的区别辨析
- 死锁,活锁和饥饿
- 操作系统精髓与设计原理--并发性:死锁和饥饿
- java高并发学习记录-死锁,活锁,饥饿
- 并发编程 - 死锁,活锁和饥饿
- 死锁、饥饿、活锁、wait()、notifyAll()、notify()