117.info
人生若只如初见

银行家算法 C语言实现

以下是银行家算法在C语言中的实现:

#include 
// 资源数量
#define M 3
// 进程数量
#define N 5
void calculateNeed(int need[N][M], int max[N][M], int allocation[N][M]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
need[i][j] = max[i][j] - allocation[i][j];
}
}
}
int isSafe(int available[M], int need[N][M], int allocation[N][M]) {
int finish[N] = { 0 };
int work[M];
for (int i = 0; i < M; i++) {
work[i] = available[i];
}
int count = 0;
while (count < N) {
int found = 0;
for (int i = 0; i < N; i++) {
if (!finish[i]) {
int j;
for (j = 0; j < M; j++) {
if (need[i][j] > work[j]) {
break;
}
}
if (j == M) {
for (int k = 0; k < M; k++) {
work[k] += allocation[i][k];
}
finish[i] = 1;
found = 1;
count++;
}
}
}
if (!found) {
break;
}
}
if (count == N) {
return 1; // 安全
} else {
return 0; // 不安全
}
}
int main() {
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];
calculateNeed(need, max, allocation);
if (isSafe(available, need, allocation)) {
printf("系统是安全的\n");
} else {
printf("系统是不安全的\n");
}
return 0;
}

以上代码实现了银行家算法的主要逻辑。输入的数据包括资源的数量、进程的数量、可用资源、最大需求矩阵和已分配矩阵。首先通过calculateNeed函数计算出需求矩阵。然后通过isSafe函数判断系统是否是安全的。如果是安全的,则输出"系统是安全的",否则输出"系统是不安全的"。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fedf3AzsLBAJTB1U.html

推荐文章

  • c语言怎么对文件进行读写

    C语言提供了一组文件操作函数,用于打开、读、写和关闭文件。下面是一个简单的示例,演示了如何对文件进行读写。 打开文件: #include int main() {
    FILE *...

  • c语言怎么声明一个函数

    在C语言中,可以使用以下格式来声明一个函数:
    返回类型 函数名称(参数列表);
    其中, 返回类型指定函数的返回值类型,可以是基本数据类型(如int、flo...

  • c语言如何定义函数并调用

    在C语言中,函数定义的一般形式如下:
    返回值类型 函数名(参数列表)
    {
    函数体
    }
    其中,返回值类型是函数执行完后返回的值的类型,可以...

  • c语言怎么读取文件内容并输出

    在C语言中,可以使用fopen函数打开文件,然后使用fscanf函数读取文件内容,最后使用printf函数输出内容。
    以下是一个读取文件内容并输出的示例代码:
    ...

  • Java BidRequest类使用实例

    以下是一个使用Java BidRequest类的示例:
    public class BidRequest {
    private String id;
    private String placementId;
    private String pu...

  • vip导致的serverConnection closed by foreign host问题

    VIP导致的"server connection closed by foreign host"问题可能是由以下几种情况导致的: VIP配置错误:当VIP配置错误时,服务器可能会关闭连接以防止未经授权的...

  • WPF TextBox使用密码样式

    WPF TextBox可以使用密码样式来隐藏用户输入的文本。要使用密码样式,可以通过设置TextBox的属性为Password,并设置PasswordChar属性为所需的密码字符。
    以...

  • Java ResultTransformer类使用实例

    ResultTransformer类是Hibernate中的一个接口,用于将查询结果转换成另一种类型的对象。它通常用于在查询过程中对结果进行自定义的处理和转换。
    下面是一个...