Python3实现银行家算法、安全性算法

Python3实现银行家算法、安全性算法

学习期间写的,希望大家一起进步。
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("不存在安全序列!!!")
        break
if jinchengshu == 0:
    for x in range(0,len(order)):
        print(order[x]+'-->',end='')
    print("END!")



    原文作者:银行家问题
    原文地址: https://blog.csdn.net/qq_33035017/article/details/78587379
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞