1. 问题基本介绍
5个哲学家5根筷子。通过信号量chopstick[5]来表示获取信号量。但当5个哲学家同时拿起筷子时,则会造成死锁。
2.死锁四个条件
我们来看看死锁四个必要条件
①资源是唯一的(筷子单位为1根)
②请求并占有:每个哲学家请求另一个筷子,但不释放其自己的筷子
③资源不可剥夺:哲学家之间不会抢筷子
④资源和请求形成一个循环层级。(哲学家之间至少出现形成一个资源请求环的情况)
3.死锁的条件破坏
那么问题来这里我们如何利用各种方法破坏死锁呢
预防死锁:(破坏必要条件)
①破坏请求:将筷子一双一双的分配,这样就不会出现请求
②破坏保持:同样也用上面的方法,当分配给一双时,就不会只得到一支筷子的条件
③资源是可以剥夺的:当一个哲学家得到一根筷子后,如果请求另一根是失败的(比如我们的具体实现方式时用延时放弃来实现的,一定时间内没有得到资源,则自动放弃请求),那么直接释放当前的筷子
④资源的循环递增:给筷子编上号并分为三组,分别为
1和2,3和4,5和6
只有当获取1后,才能申请2。当申请1阻塞时,率先尝试申请第二组,不行再申请第三组。这样就即保证了顺序的循环递增,也保证了不会大家都堵在同一个1中无法继续申请。
’
…后面复习完银行家算法后我会回来看看死锁的相关检测和处理。