当一个进程在等待永远不可能发生的事件时,就会产生死锁,若系统中多个进程出于死锁状态,就会造成系统死锁。
 死锁产生的必要条件:

    资源互斥
    每个进程占有资源并等待其他资源
    系统不能剥夺进程资源
    进程资源图是一个环路

 死锁产生后,解决措施是打破四大条件,有下列方法:
 死锁预防:采用某种策略限制并发进程对于资源的请求,破坏死锁的四大条件之一,使系统任何时候都不满足死锁的条件。
 死锁避免:一般采用银行家算法来避免。银行家算法,就是提前计算出一条不会死锁的资源分配方法,才分配资源,否则不分配资源。
 死锁检测:允许死锁产生,当系统定时运行一个检测死锁的程序,若检测到系统中发生死锁,则设法加以解除。
 死锁解除:即死锁发生后的解除办法,如剥夺资源,撤销进程等。

死锁计算问题:系统内有你n个进,每个进程需要R个资源,那么其发生死锁的最大资源数为 n ∗ ( R − 1 ) n*(R-1) n∗(R−1)。其不发生死锁的最小资源数为 n ∗ ( R − 1 ) + 1 n*(R-1)+1 n∗(R−1)+1.
线程

 传统的线程有两个属性:可拥有资源的独立单位,可独立调度和分配的基本单位。
 引入线程后,线程是独立调度的最小单位,进程是拥有资源的最小单元。线程可以共享进程的公共数据,全局变量,代码,文件等资源,但不能共享进程中某线程独有的资源,如线程的栈指针等标识数据。