最近在做并发缺陷的分类,发现不同学者对缺陷分类粒度不同,现对其中几个概念重述,欢迎交流!
本文以书面文字为准,附上说明来源。
若希望简单易懂的举例,请移步死锁,活锁和饥饿
死锁
1971年,Coffman总结系统产生死锁必定同时保持如下4个必要条件。
- 互斥条件(mutual exclusion):临界资源是独占资源,进程应互斥且排他地使用这些资源。
- 占有和等待条件(hold and wait):进程在请求资源得不到满足而等待时,不释放已占有资源。
- 不剥夺条件(no preemption):又称不可抢占,已获资源只能由进程自愿释放,不允许被其他进程剥夺。
- 循环等待(circular wait):又称环路条件,存在循环等待链,其中,每个进程都在等待链中等待下一个进程所持有的资源,造成这组进程处于永远等待状态。
前三个条件是死锁存在的必要条件,但不是充分条件。第四个条件是前三个条件同时存在时所产生的结果,故条件并不完全独立。但是单独考虑每个条件是有用的,只要破坏四个之一,就可以防止死锁
费翔林 骆斌《操作系统教程》(第五版)第三章 同步、通信与死锁
Deadlock happens when a thread(process) cannot proceed because it needs to obtain