1、死锁是什么
死锁是指两个或者两个以上的线程在执行过程中,互相持有对方所需要的的资源,导致这些线程都一直处于等待状态,如果没有外力的作用,他们将一直阻塞下去,就会进入永久阻塞状态。
2、产生死锁的原因
但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件:
- 互斥,共享资源只能被一个线程持有。
- 占有且等待,线程1获得了资源X,在等待共享资源Y时,不释放共享资源X。
- 不可抢占,其他线程不可抢占已经获得资源的线程占有的资源。
- 循环等等待,线程1等待线程2持有的资源,线程2等待线程1持有的资源。
3、避免死锁的方法
死锁一旦发生,没有好的办法解决,只能通过重启应用。解决死锁的最好办法就是避免死锁,避免产生死锁的情况就能避免死锁的产生。
首先,条件1互斥是无法避免的,条件2占有且等待我们可以一次申请所有的共享资源,而不是一个一个资源去申请。对于条件3,当线程持有某个共享资源,再去申请另一个共享资源时,如果申请不到就先释放已经获得的共享资源,对于条件4,我们可以将申请共享资源按照次序,先申请小的在申请大的,这样就可以避免循环等待。