面试官:小张,说一说什么是死锁
回答:死其实就是多个线程,或者一组线程,他们是相互竞争的关系,但是他们又互持资源,然后又相互等待,这样子他就会导致永久的这种阻塞的现象,其实这就是死锁了。
面试官:那诱发死锁的原因是?
回答:诱发死锁的原因主要有四点:
1.互斥条件
2.占有且等待
3.不可抢夺资源(不可抢占)
4.循环等待
面试官:好,那你遇到这个死锁问题是怎么解决的呢?
回答:其实死锁基本上一发生,就基本上很难去认为的去干预解决掉它,所以一般我都是去规避它。
那么其实刚刚我说到了死锁发生的四个条件。只要同时满足了,就会触发死锁这种现象,所以只要我们去打破其中任意一条,就不会发生死锁。
面试官:那你可以具体讲一下嘛?
回答:可以,比如第一个互斥条件,这个互斥条件基本上是无法破坏的,因为线程本身就是通过互斥来解决线程安全这个问题的,所以这个基本就不用考虑了,主要考虑或者分析的就是2,3,4点。
对于第二个占有且等待,那么解决方法就是让这个线程一次性去申请所有的所需的资源,这样子就不存在去等待资源这个问题了。
第三个就是不可抢占了,这个就是当我们的线程已经持有一部分资源了,但是它还需要其他资源的时候,如果它去申请但是申请不到,或者得到的资源不够,那么我们就让这个线程主动去释放掉它已有的所有资源,这样我们就可以解决不可抢占资源这个问题了。
第四个就是循环等待了,它是按照这种申请资源来进行预防的,按顺序去申请资源来预防的,因为资源它是有线性顺序的,所以申请的时候我们可以先申请序号比较小的,然后再去申请比较大的,那么申请完毕之后他就不会存在循环的等待这种问题了。
面试官:好