r
r
securityworkavailable
eedallocatio
fi
ishrequestr
r
fori0i5i判断fi
ish是否都为1r
r
iffi
ishi0r
flag51r
r
ifflag51如果flag51则不安全,恢复原来的资源分配状态r
r
availableiavailableirequestir
allocatio
aiallocatio
airequestir
eedai
eedairequestir
r
r
r
判断安全性的子函数securityr
voidsecurityworkavailable
eedallocatio
fi
ishrequestr
i
twork5fi
ish5available3allocatio
53
eed53request3r
r
i
tijkar
i
tflag40flag50两个标志变量r
fori0i5ifi
ishi0对标志是否安全的数组付初值r
fori0i3iworkiavailablei开始时workavailabler
b1fori0i5i安全性算法的灵魂区域r
r
forj0j3jr
r
if
eedijworkjr
flag41用标志变量flag4来判断该进程是否各种资源都满足
eedworkr
r
ifflag40fi
ishi0判断该进程是否同时满足两个条件,如满足则继续r
r
fork0k3k释放分配给进程的资源r
r
workkworkkallocatio
ikr
r
fi
ishi1纪录该进程,设fi
ish标识为1r
gotob1跳转到第一个进程继续执行r
r
elser
r
flag40如果该进程不满足条件b2在将flag4改回初始值r
co
ti
uer
r
r
fori0i5i判断fi
ish是否都为1r
r
iffi
ishi0r
flag51r
r
ifflag50利用flag5来判断是否所有fi
ish标志都为1即是否安全r
r
pri
tf