活锁、死锁和饥饿

         在我们利用封锁技术时,可以避免并发操作引起的各种错误,但是可能产生三个问题:活锁、死锁和饥饿。以下是个人的简单理解。

活锁

        活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试—失败—尝试—失败的过程。处于活锁的实体是在不断的改变状态,活锁有可能自行解开。

         例子:你骑车的时候对面方向迎来了一个人,你往左偏给对方让路,结果对方同样也右偏了给你让路,你俩还是头对头;然后你无奈的往右偏,希望对方从右边过去,结果对方跟着你偏了,你俩还是头对头;然后你不断换方向,对方不断跟着换方向…好无奈。

 

死锁

           死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

          例子:两人在独木桥相遇,谁也不让谁先过去,然后两人僵持不下,其他的人也没有办法过桥,面对两个暴脾气,被迫看戏中。

 

饥饿

         是指如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁后,系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后,系统又批准了T4的请求......T2可能永远等待。

        例子:两个人过独木桥,B让A先走了,然后又来了C,B继续礼让,让C走,结果又来了D、E、F,然后B就一直礼让,一直等待,始终没过独木桥,乖乖做个安静的美男子。

 

区分

       活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”,而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。活锁可以认为是一种特殊的饥饿,它一种“活”的饥饿。

 

评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值