『面试问答』:死锁是怎么产生的?如何避免死锁?
面试官 : 请说一下,死锁是怎么产生的?如何避免死锁?
死锁,是导致线程卡死的锁冲突,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。
产生死锁有四个必要条件,同时满足这四个条件,死锁才会发生。
1.互斥条件。互斥条件是指多个线程不能同时使用同一个资源,若一个线程已经拥有了该资源,那么其他想获取该资源的线程就需要阻塞等待。
2.不可剥夺条件。不可剥夺条件是指当一个资源被线程获取了之后,如果该线程不主动释放该资源,那么该资源一直被占有,其他想获取该资源的线程就要一直进行等待。
3.请求与保持条件。请求与保持条件是指线程已经拥有了一个资源,但又提出了新的资源请求,而该资源已被其他线程占有,此时请求线程被阻塞,但对自己已获得的资源保持不放。
4.循环等待条件。循环等待条件是指在死锁发生的时候,两个线程获取资源的顺序构成了环形链,环路中每一个线程所占有的资源同时被另一个线程申请,也就是前一个线程占有后一个线程所申请的资源。
要避免死锁问题,一般方法是打破循环等待条件,让两个线程之间获取资源的顺序不要穿插在一起,可以让一个线程先获得两个资源,使用完毕后释放,另一个线程再获取这两个资源,就可以保证两个线程都能正常执行。
软件开发面试问答 文章被收录于专栏
分享软件开发岗位面试题及答案

