死锁产生的四个条件
- 互斥条件
- 请求并持有
- 不可剥夺条件
- 环路等待条件
互斥条件:该资源同时只由一个线程占用。如果有其他线程请求获取该资源,则请求者只能等待,直至占有资源的线程释放该资源。
请求并持有条件:指一个线程已经持有了一个资源,但又提高了一个新资源请求,而新资源已被其它线程占有,当前线程会阻塞,但阻塞的同时并不会释放自己已经获取的资源。
不可剥夺条件:指线程获取到的资源在自己使用完之前不能被其它线程抢占,只有在自己使用完毕后才由自己释放该资源。
环路等待条件:指在发生死锁时,必然存在资源环形链。
怎么避免死锁呢?(至少破环死锁发生的一个条件)
互斥是锁的特性,我们无法破坏。
- 请求并持有:一次性请求所有的资源
- 不可剥夺:当一个已经持有了一些资源的进程在提出新的资源请求没有得到满足时,它必须释放已经保持的所有资源,待以后需要使用的时候再重新申请,不可抢占这个条件就破环掉了
- 环路等待:通过定义资源线性访问,将每一个资源编号,当资源占用编号为i的资源时,那么下次申请只能申请编号大于i的资源。