什么是死锁
所谓死锁,是一组互相竞争资源的线程 因互相等待 导致"永久"阻塞的现象
发生死锁的原因
一般有四个
第一个就是互斥条件,共享资源 X 和 Y 只能被一个线程占用
第二个是指占有且等待,线程t1取得共享资源x
在等待资源y的时候不释放x资源
第三个不可抢占,其他线程不能强行抢占,线程t1占有的资源
第四个循环等待,线程t1等待线程t2占有的资源
线程t2等待线程t1占有的资源 这就是循环等待
是如何避免死锁呢
既然发生死锁的原因是
需要同时满足这四个条件
我们只需要打破其中任意一个条件
即可避免死锁问题
而在这四个条件中,第一个互斥条件是无法被破坏的,因为锁本身就是通过
互斥来解决线程安全问题的
占有且等待,我们可以一次申请所有资源 这样就不存在等待了
第二个是对于不可抢占这个条件
占用部分资源的线程进一步申请其他资源时,如果申请不到 可以主动释放它占有的资源 这样不可抢占这个条件就破坏掉了
第三个点 对于循环等待这个条件 可以按序申请资源进行预防 所谓按序申请 是指资源是有线性顺序的 申请的时候可以先申请资源号小的