死锁

1,死锁的两种情况

       1,同一线程重复申请同一把锁,在第二次申请时,必须要将第一次申请的锁释放掉,

            但是要释放第一次申请的锁,就必须要将第二次申请的锁释放,这样就死循环了。

       2,进程1申请了锁1,进程2申请了锁2,然后进程1右申请了锁2,进程2又申请了锁1,

            这样当进程1申请锁2时,必须要将锁2释放,释放锁2又必须要锁1,释放锁1又必须释放锁2,

           这样就死循环了。

2,产生死锁的原因

          1,进程间推进的顺序不当:也就是说,申请和释放锁的顺序不对。

3,产生死锁的必要条件


         1,互斥条件(其他线程必须等)

                   一个资源只能被一个线程占用,其他资源申请就必须要等待,直到当前线程释放。

        2,请求和保持条件

                    一个线程拥有一个资源,然后去获取另一个新资源,当这个新的资源也被其他线程占用的时候,

                   当前进程就在挂起等待,但会保持不放自己的资源。

        3,不可抢占资源

                  线程已获得的资源在没有释放前不能被占用,只能自己使用完后释放。

        4,循环等待条件

               线程组{p1,p2,p3,p4......pn}, p1等待p2占有的资源,p2等待p3占有的资源,,,,,pn等待p1占有的资源。

               即每一个线性都想申请前一个线程占有的资源,形成一个环形等待队列。

4,如何避免死锁

      1,打破死锁的必要条件(互斥条件不可打破);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值