-
编程实现的银行家算法(以VS为例)
资源介绍
#define n 5 //进程个数
#define m 3 //资源种类
int Available[m],Alloc[n][m],Need[n][m];
main()
{
int request[m];
input( );
while (1)
{
read_req( );
if (请求结束) break;
(1) if (!(requesti<=Needi)) 表示非法请求;
(2) if (!(requesti<=Availablei)) 则Pi阻塞;
(3)试探性分配
Available=Available - Requesti;
Alloci=Alloci+Requesti;
Needi=Needi-Requesti;
(4)若新状态安全,则实际分配资源给Pi,否则取消试探性分配。
}
}
安全状态判别算法:
(1)设置Finish=(false,...,false) work=Available
(2)循环查找满足下列条件的进程pi //最多循环n次
Finish[i]=false且Needi<=work
(3)若找到则 Finish[i]=true;work=work+Alloci; 转(2)
(4)若Finish=(true,...,true) 则安全,否则不安全。
测试数据:m=3:种类型的资源(A,B,C,) 进程个数n=5
Available=(2,3,3);