死锁

什么是死锁

是一组互相竞争资源的线程,因互相等待,导致“永久”阻塞的现象。

发生死锁的原因

1.互斥条件,共享资源X和Y只能被一个线程占用

2.占有且等待,线程T1已经获取得共享资源X在等待共享资源Y的时候,不释放共享资源X

3.不可抢占,其他线程不能强行抢占线程T1占有的资源

4.循环等待,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源

如何避免死锁

打破死锁的四个原因。

第一个互斥条件是无法被破环的,因为锁本身就是通过互斥来解决线程安全问题的。

第二个占有且等待,打破方式是,一次性申请所有的资源,这样就不用等待了。

第三个不可抢占,占用资源的线程,进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样打破了。

第四个循环等待,可以靠按序申请资源来进行预防,所以按序申请是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样线性化后自然就不存在循环等待了。


死锁
http://hanqichuan.com/2019/07/18/java/死锁/
作者
韩启川
发布于
2019年7月18日
许可协议