博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
活锁、死锁和饥饿
阅读量:4046 次
发布时间:2019-05-24

本文共 723 字,大约阅读时间需要 2 分钟。

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

活锁

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

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

 

死锁

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

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

 

饥饿

         是指如果事务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就一直礼让,一直等待,始终没过独木桥,乖乖做个安静的美男子。

 

区分

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

 

转载地址:http://nyzci.baihongyu.com/

你可能感兴趣的文章
linux环境变量(转载)
查看>>
C语言中strlen与sizeof的区别(`$~新年快乐~$`!)
查看>>
struct msghdr与struct iovec
查看>>
编译和解释的区别是什么?
查看>>
unpv1 Makefile 文件 简略分析
查看>>
linux网络编程 UDP聊天程序 包括群聊和私聊
查看>>
linux 网络编程 Tcp文件服务器
查看>>
有关send() / recv()函数的理解
查看>>
ping在类unix下的实现
查看>>
python下操作数据库
查看>>
python下对数据库的操作(2) 图片的存取
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
剖析 Linux hypervisor
查看>>
常用排序算法总结(二)
查看>>
基于redhat的发行版本的linux系统 下 扩展Swap分区
查看>>
Fedora下安装Fcitx
查看>>
SSH原理与运用
查看>>
libvirt LXC driver --pass-fds
查看>>
Python ::OS模块 提供的接口介绍
查看>>
Python调用shell命令的几种方法(在新进程中执行shell命令)
查看>>