线程死锁
产生死锁的四个必要条件
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
解决死锁的方法
-
按同一顺序访问对象。(注:避免出现循环)
-
避免事务中的用户交互。(注:减少持有资源的时间,较少锁竞争)
-
保持事务简短并处于一个批处理中。(减少持有资源的时间)
-
使用较低的隔离级别。(注:使用较低的隔离级别(例如已提交读)比使用较高的隔离级别(例如可序列化)持有共享锁的时间更短,减少锁竞争)
-
尽量减少资源占用的时间,可以降低死锁的发生的概率
-
银行家算法。银行家算法----安全序列
Available = [] #各可用资源数目 Used ={} #某进程目前占有各资源数 Need = {} #某进程目前需求资源数 zhan = [] #临时存储列表 order = [] #进程安全顺序列表 pandaun = [] def compare(a = [],b = []): for x in range(0,item): #进行列表对应元素的比较 if (int(a[x]) < int(b[x])): #一旦出现供不应求的情况即返回False return false break #且跳出循环 return True #如果符合条件即返回True def AddUsed(a = [],b = []): #可用资源某进程当前占用资源对应位置相加 for x in range(0,item): a[x] = int(a[x]) + int(b[x]) item = int(input("请输入资源种类数: ")) SP = int(input("请输入进程数: ")) jinchengshu = SP #设置临时变量表示进程数量,在后面的判断中用 #输入各类资源的可用数目并存储到列表Available中 for x in range(1,item+1): Available.APPend(input("请输入第"+str(x)+"种资源的可用数目: ")) #输入各进程名称,占有资源数及所需,键值对存储 for x in range(1,SP+1): name = input("请输入第"+str(x)+"个进程名称: ") print("该进程占有的"+str(item)+"类资源数为:") for y in range(1,item+1): zhan.append(int(input())) Used[name] = zhan zhan = [] #清空临时列表 print("该进程需要的"+str(item)+"类资源数为:") for z in range(1,item+1): zhan.append(int(input())) Need[name] = zhan zhan = [] #清空临时列表 #安全性算法开始 while Need: #如果进程表Need不为空 for key in Need: #获取Need中的key zhan = Need[key] #将对应的value赋值给临时列表zhan if compare(Available,zhan):#调用比较函数比较列表中个元素与Avilable中个元素的大小并返回真值 AddUsed(Available,Used[key]) #如果返回True则调用相加函数 order.append(key) #将key值放入order列表中以便显示 a = key #设置a令它等于key,删除字典元素时使用 break if compare(Available,zhan): #如果符合大小条件就删除对应的键值对 del Need[a] jinchengshu -= 1 if SP == jinchengshu: print("不存在安全序列!h!!") break if jinchengshu == 0: for x in range(0,len(order)): print(order[x]+'-->',end='') print("END!")
相关阅读
1.什么是负载均衡?当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务
最后更新:2019-3-23 请大家首先确定已经按照原文的方法及步骤尝试过,但是还是没有解决问题再来看这篇文章。如果你还没有看过原文,请
1、打开QTranslate 选项窗口2、选择高级选项卡3、将Google域名选项更改为cn4、单击确定或应用 按钮以保存更改
今天做了一个播放器,播放网络视频;视频源通过网络请求获取,获取到你为视频URL,URL为http://o8uchkzh4.bkt.clouddn.com/917%E6%99%BA%
解决更新yum源的[Errno 14] HTTP Error 404 - Not Fou
在Linux输入一些yum命令时出现如下错误: Loaded plugins: fastestmirror http://mirrors.163.com/centos/%24releasever/os/x86_6