
我认为僵局和饥饿之间的区别可以这样理解. 首先,饥饿时死锁是同步和异步的. 也就是说,死锁可以看作是两个线程或进程同时请求彼此持有的资源,饥饿可以看作是一个线程或进程无限期地等待两个或多个线程或进程被占用,但不会继续释放释放的资源.
介绍一个“死锁”示例: 如果线程A锁定记录R1并等待记录R2死锁举例,并且线程B锁定记录R2并等待记录R1,则两个线程A和B出现死锁现象.

示例2: “僵局”: 两只山羊穿过同一座桥,两只绵羊同时走到桥中间,一只山羊等待另一只山羊通过,然后越过桥,另一只山羊等待为了让这只山羊通过,结果,两只山羊都被卡在了中间.
一个饥饿的例子: 两个或多个线程或进程互相使用而第三方线程或进程永远不可用的资源. 想象一下,三个人传球,其中两个传球,而第三个人从不传球.

以下四个条件将导致死锁:
1,互斥. 线程或进程始终拥有共享资源,例如,垄断资源.

2,循环等待. 例如,进程A在等待进程B,进程B在等待进程C,进程C在等待进程A.
3,部分分配. 资源是部分分配的. 例如,进程A和B都需要访问文件,并且需要使用打印机. 进程A获取文件资源,进程B获取打印机资源,但是任何一个进程都无法获取所有资源.

4,缺乏优先权. 即使该进程处于阻塞状态,该进程也已获取了资源但尚未释放它.
根据先前的分析,情况1和情况4是线程或进程无休止地等待着其他几个线程或进程所占用的资源.
根据上述可能导致死锁的情况,可以采取预防措施死锁举例,例如,如果控制线程或进程确定无法获取所有必需的资源,则它将释放其已占用的资源,依此类推.
实际上,当遇到一个对象执行多个动作时,并且这些动作散布在一起时,必须使用线程的概念来编写程序. 这时,您需要特别注意程序执行的效率,并防止死锁或出现饥饿.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-228135-1.html
我更了