『面试问答』:死锁是怎么产生的?如何避免死锁?

面试官 : 请说一下,死锁是怎么产生的?如何避免死锁?

死锁,是导致线程卡死的锁冲突,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。

产生死锁有四个必要条件,同时满足这四个条件,死锁才会发生。

1.互斥条件。互斥条件是指多个线程不能同时使用同一个资源,若一个线程已经拥有了该资源,那么其他想获取该资源的线程就需要阻塞等待。

2.不可剥夺条件。不可剥夺条件是指当一个资源被线程获取了之后,如果该线程不主动释放该资源,那么该资源一直被占有,其他想获取该资源的线程就要一直进行等待。

3.请求与保持条件。请求与保持条件是指线程已经拥有了一个资源,但又提出了新的资源请求,而该资源已被其他线程占有,此时请求线程被阻塞,但对自己已获得的资源保持不放。

4.循环等待条件。循环等待条件是指在死锁发生的时候,两个线程获取资源的顺序构成了环形链,环路中每一个线程所占有的资源同时被另一个线程申请,也就是前一个线程占有后一个线程所申请的资源。

要避免死锁问题,一般方法是打破循环等待条件,让两个线程之间获取资源的顺序不要穿插在一起,可以让一个线程先获得两个资源,使用完毕后释放,另一个线程再获取这两个资源,就可以保证两个线程都能正常执行。

#晒一晒我的offer##软件开发薪资爆料##我的实习求职记录##23届找工作求助阵地#
软件开发面试问答 文章被收录于专栏

分享软件开发岗位面试题及答案

全部评论

相关推荐

评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务