操作系统 银行家算法模拟(三)

本文介绍了一个用于模拟资源分配过程的功能函数。通过递归的方式找出所有可能的资源分配序列,并在所有进程分配完成后打印序列。该函数利用临时变量保存当前状态,并在每次递归调用前后恢复原始状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能函数:

3.打印所有模拟分配序列

思路:

使用递归调用。找到符合条件的i进程,tmp_ProcessSet的第i位置为count,再调用这个函数,其中形参count+1,

最后找不到符合的进程时,判断是否所有进程都分配,若都分配完成则输出当中的序列。


程序:

void allocate_list(int source_count,int process_count,int **allocation,int **need,int *CurrentAvailable,int *ProcessSet,int count)

{

    int i;

    int j;

    int k;

    int *tmp_CurrentAvailable;

    int *tmp_ProcessSet;

 

    tmp_CurrentAvailable = (int *)malloc(sizeof(int) * source_count);

    tmp_ProcessSet = (int *)malloc(sizeof(int) * process_count);

 

    //拷贝

    for(i = 0; i < process_count; i++)

    {

        tmp_ProcessSet[i] = ProcessSet[i];         

    }

    for(j = 0; j < source_count; j++)

    {

        tmp_CurrentAvailable[j] = CurrentAvailable[j];

    }

 

    j = 0;

    while(j < process_count)

    {

    if(IN == tmp_ProcessSet[j])//找是否有可分配的

    {

        for(k = 0; k < source_count; k++)//每个资源是否符合

        {

        if(need[j][k] > tmp_CurrentAvailable[k])

        {

            break;

            }

        }

        if(k == source_count)//符合

        {

            tmp_ProcessSet[j] = count;

        for(k = 0; k < source_count; k++)

       {

            tmp_CurrentAvailable[k] += allocation[j][k];

        }

 

allocate_list(source_count,process_count,allocation,need,tmp_CurrentAvailable,tmp_ProcessSet,count + 1);

                //拷贝

                for(i = 0; i < process_count; i++)

                {

                    tmp_ProcessSet[i] = ProcessSet[i];         

              }

          for(k = 0; k < source_count; k++)

         {

                 tmp_CurrentAvailable[k] = CurrentAvailable[k];

         }

        }

        }

    j++;

    }

 

    for(i = 0; i < process_count; i++)

    {

     if(IN == tmp_ProcessSet[i])

    {

            break;

    }

    }

    if(i == process_count)//都排完了

    {

        print_list(process_count,tmp_ProcessSet);

    }

    free(tmp_CurrentAvailable);

    free(tmp_ProcessSet);

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值