根据文中说说
数据结构
- 可用材料向量表示系统当前可用的每种材料类型的数量。
- Zui巨大需求矩阵表示个个进程对每种材料Zui巨大需求量。
- Yi分配矩阵表示个个进程Yi经得到的材料数量。
- 需求矩阵表示个个进程还需几许多材料才Neng完成。
初始化
- 初始化available向量,通常由系统总材料数减去初始分配给各个进程的材料数得到。
- 初始化max、allocation和need矩阵。
材料求
- 当一个进程求材料时 需要进行正规性检查,即检查求的材料量是不是不巨大于进程的Zui巨大需求量和系统当前可用材料量。
平安性检查
- 用平安序列法来判断是不是Neng平安地分配材料。这通常涉及到对进程进行排序,并检查在某个进程得到所需材料后系统Neng否进入平安状态。
材料分配
- Ru果系统处于平安状态, 则分配材料给求的进程,并geng新鲜available、allocation和need矩阵。
- Ru果系统不处于平安状态,则不要材料求。
材料释放
- 当进程完成时 释放其占用的材料,并geng新鲜available、allocation和need矩阵。
下面是C++代码中一些关键的循环和条件判断的代码片段:
cpp
// 判断是不是分配材料
bool isSafe {
// ...
// 判断是不是满足材料需求
for ; i++) {
if {
return false;
}
}
// 尝试分配材料
for ; i++) {
available -= request;
allocation += request;
need -= request;
}
// ...
return true;
}
平安序列检查
- 实现一个函数来检查全部进程是不是Neng形成一个平安序列。Ru果Neng,说明系统是平安的。
日志记录
,避免死锁,并确保系统材料的高大效利用。