C语言实现银行家安全性算法

实验作业,楼主学生党一枚,欢迎大神提出意见

这是测试数据和测试结果
这是测试数据和测试结果

banks.h

/*
 * banks.h
 *
 *  Created on: 2019年11月30日
 *      Author: zyli
 */

#ifndef BANKS_H_
#define BANKS_H_


/*******************************初始化*************************************************/
#include<stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define Nresource 3
#define Nprocess 5
//int Nresource=0;
//int Nprocess=0;
//void __init__()
//{
   
//	//初始化资源种类
//		printf("请输入资源种类数");
//		scanf("%d",&Nresource);
//
//	//初始化进程个数
//		printf("请输入进程数");
//		scanf("%d",&Nprocess);
//}

int Available[Nresource]={
   0};
int Max[Nprocess][Nresource]={
   0};
int Allocation[Nprocess][Nresource]={
   0};
int Need[Nprocess][Nresource]={
   0};
int safetyArray[Nprocess]={
   0};
int Request[Nprocess][Nresource]={
   0};
int Work[Nresource]={
   0};
bool Finish[Nprocess]={
   0};

/******************************打印状态***************************************/
void print_status()
{
   
	printf("当前状态:\n");
	printf("	  Max	  Allocation	  Need	  Available\n");
	printf("	  	  			    ");
	for(int j=0;j<Nresource;j++) printf("%d ",Available[j]);
	printf("\n");
	for(int i=0;i<Nprocess;i++)
	{
   
		printf("P%d	 ",i);
		for(
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
银行家算法是一种用于避免死锁的算法,其实现过程中需要计算系统的安全性。下面是C语言实现银行家算法中的安全性算法: ```c #include <stdio.h> #include <stdbool.h> #define N 5 // 进程数 #define M 3 // 资源数 int available[M] = {3, 3, 2}; // 各类资源的可用数量 int max[N][M] = { {7, 5, 3}, {3, 2, 2}, {9, 0, 2}, {2, 2, 2}, {4, 3, 3} }; // 各进程最大需求 int allocation[N][M] = { {0, 1, 0}, {2, 0, 0}, {3, 0, 2}, {2, 1, 1}, {0, 0, 2} }; // 各进程已分配 int need[N][M]; // 各进程尚需资源数量 bool finish[N] = {false, false, false, false, false}; // 进程是否完成 // 计算need数组 void calc_need() { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { need[i][j] = max[i][j] - allocation[i][j]; } } } // 判断是否存在一个未完成的进程,其need小于等于available的资源数 bool check(int p) { for (int i = 0; i < M; i++) { if (need[p][i] > available[i]) return false; } return true; } // 安全性算法 void safety_algorithm() { int count = 0; // 完成进程数 int order[N]; // 安全序列 int work[M]; // 模拟可用资源数 for (int i = 0; i < M; i++) { work[i] = available[i]; } while (count < N) { bool flag = false; // 是否找到一个可以完成的进程 for (int i = 0; i < N; i++) { if (!finish[i] && check(i)) { // 如果进程未完成且可以完成 for (int j = 0; j < M; j++) { work[j] += allocation[i][j]; // 模拟分配资源 } finish[i] = true; // 标记进程已完成 order[count] = i; // 记录进程号 count++; // 完成进程数加1 flag = true; } } if (!flag) { // 如果没有找到可以完成的进程 printf("无安全序列\n"); return; } } printf("安全序列:"); for (int i = 0; i < N; i++) { printf("%d ", order[i]); } printf("\n"); } int main() { calc_need(); safety_algorithm(); return 0; } ``` 在以上代码中,`available`数组表示各类资源的可用数量,`max`数组表示各进程最大需求,`allocation`数组表示各进程已分配,`need`数组表示各进程尚需资源数量,`finish`数组表示进程是否完成。`calc_need`函数用于计算`need`数组,`check`函数用于判断是否存在一个未完成的进程,其`need`小于等于`available`的资源数。`safety_algorithm`函数是安全性算法的主体,用于计算安全序列。在`main`函数中,首先计算`need`数组,然后调用`safety_algorithm`函数计算安全序列。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值