⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pengli.c

📁 用银行家算法实现资源分配。多个进程动态共享系统的资源可能会产生死锁现象。但只要资源分配策多个进程动态共享系统的资源可能会产生死锁现象。但只要资源分配策略能保证进程不出现循环等待
💻 C
字号:
#include<stdio.h>
struct claim
{
    int user;
    int num[3];
}claims;
int input()
{
    printf("please input your request:user(0~4):\n");
    scanf("%d",&claims.user);
    printf("input the number of resource a:\n");
    scanf("%d",&claims.num[0]);
    printf("input the number of resource b:\n");
    scanf("%d",&claims.num[1]);
    printf("input the number of resource c:\n");
    scanf("%d",&claims.num[2]);
    return 1;
}
int safety_chk(int alloc[][3],int need[][3],int avail[3])
{
    int work[3],finish[5];
    for(int p=0;p<5;p++)//i大于2后对WORK是无意义的
    {
        work[p]=avail[p];
        finish[p]=0;
    }
    for(int i=0;i<5;i++)   
    {
        if(finish[i]==0&&
            need[i][0]<=work[0]&&
            need[i][1]<=work[1]&&
            need[i][2]<=work[2]    )
        {
            for(int j=0;j<3;j++)
                work[j]=alloc[i][j]+work[j];
            finish[i]=1;
            i=-1;//重头再来
        }
    }
    for(i=0;i<5;i++)
    {
        if(finish[i]==0)
            return 0;
    }
    return 1;
}

int process(int alloc[][3],int need[][3],int avail[3])
{
    int ret;
    input();
    for(int i=0;i<3;i++) //out of resource number
    {
        if(claims.num[i]>need[claims.user][i]||claims.num[i]>avail[i])
            return 0;
    }
    for(i=0;i<3;i++)//trying
    {
        avail[i]=avail[i]-claims.num[i];
        alloc[claims.user][i]=alloc[claims.user][i]+claims.num[i];
        need[claims.user][i]=need[claims.user][i]-claims.num[i];
    }
    if((ret=safety_chk(alloc,need,avail)==0))
    {

        printf("safety_chk's result %d \n",0);
        for(i=0;i<3;i++)
        {
            avail[i]=avail[i]+claims.num[i];
            alloc[claims.user][i]=alloc[claims.user][i]-claims.num[i];
            need[claims.user][i]=need[claims.user][i]+claims.num[i];
        }
        return 0;
    }
    else
    {

        printf("safety_chk's result %d \n",1);
    }
    return 1;
}
void main()
{
    int alloc[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
    int need[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
    int avail[3]={3,3,2};
    if(process(alloc,need,avail)==0)
        printf("sorry,we cannot help you!\n");
    else printf("operation complete!\n");    
    return;
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -