银行家算法

原创 2007年10月13日 04:34:00

就是我的作业啦,拿给大家看看有没有什么要改的地方.

关于银行家算法的,本来我问了老师我可不可以不写,结果被训了一顿.
我字本来就不好,非要我手写下来,哎,光交代码还不成.

bank.h
[code]
#include "windows.h"
#include "time.h"

#define Z 7        //某个墒值
#define M 3        //资源数
#define N 4        //进程数

class CProcess        //进程类
{
public:
    CProcess();
    void Set();        //设置已分配资源

    DWORD max[M], used[M];        //最大需求资源,已分配资源
    int ok;        //需求状态标识
};

class CResource        //资源类
{
public:
    CResource();
    void AddResource(CProcess &p);        //增加资源函数

    DWORD r[M];        //可利用资源
};

int Test(CProcess p[N]);        //测试是否全部分配结束
int Check(CProcess p[N], CResource r, int n);        //检查是否可分配资源

CProcess::CProcess()
{
    srand((unsigned)time (NULL));
    Sleep(1000);
    for(int i = 0; i < M; i++)
    {
        max[i] = (rand() % Z) + 1;
        used[i] = Z;
        cout<<max[i];
    }
    ok = 0;
    cout<<endl;
}

void CProcess::Set()
{
    srand((unsigned)time (NULL));
    Sleep(1000);
    for(int i = 0; i < M; i++)
    {
        while (used[i] >= max[i])
        {
            used[i] = rand() % Z;
        }
        cout<<used[i];
    }
    cout<<endl;
}
   
CResource::CResource()
{
    srand((unsigned)time (NULL));
    cout<<endl;
    for(int i = 0; i < M; i++)
    {
        r[i] = rand() % Z;
        cout<<r[i];
    }
    cout<<endl<<endl;
}

void CResource::AddResource(CProcess &p)
{
    for(int i = 0; i < M; i++)
    {
        r[i] += p.used[i];
        p.used[i] = 0;
    }
    p.ok = 1;
}

int Test(CProcess p[N])
{
    int result = 1;
    for(int i = 0; i < N; i++)
    {
        result *= p[i].ok;
    }

    return result;
}

int Check(CProcess p[N], CResource r, int n)
{
    int result = 1;
    for(int i = 0; i < M; i++)
    {
        if (r.r[i] < (p[n].max[i] - p[n].used[i]))
        {
            return 0;
        }
    }

    return result;
}[/code]
bank.cpp
[code]
#include "iostream.h"
#include "bank.h"

int main(void)
{
    CProcess process[N];
    CResource resource;
    DWORD n = 0, j = 0;

    for(int i = 0; i < N; i++)
    {
        process[i].Set();
    }
//    cout<<Test(process);
    while (0 == Test(process))
    {
//    cout<<"A"<<n;
        if (0 == process[n].ok)
        {
            if (Check(process, resource, n))
            {
                resource.AddResource(process[n]);
                cout<<(n + 1);
                j = 0;

            }
        }
            n++;
            j++;
            if (j > N)
            {
                cout<<"no!";
                return 1;
            }
            n %= N;
    }

    return 0;
}
[/code] 

银行家算法vc++模拟实现

操作系统在对资源进行分配的时候会出现一种资源的争抢,为了避免在资源争抢的时候出现死锁现象引入了银行家算法。...
  • CSD1993
  • CSD1993
  • 2014-12-15 16:43:08
  • 1754

[C#]银行家算法的实现

简略介绍了死锁\安全状态; 并给出了使用银行家算法的窗体程序的C#代码.
  • qq_29150007
  • qq_29150007
  • 2016-07-22 00:19:03
  • 1143

银行家算法java实现

关于银行家算法的理论知识,课本或者百度上有好多资料,我就不再多说了,这里把我最近写的银行家算法的实现带码贴出来。 由于这是我们的一个实验,对系统资源数和进程数都指定了,所以这里也将其指定了,其中系统...
  • u012116457
  • u012116457
  • 2014-05-09 12:52:26
  • 8764

java实现银行家算法

  • 2008年12月26日 15:15
  • 6KB
  • 下载

银行家算法源代码(操作系统)银行家算法

  • 2009年04月26日 22:16
  • 3KB
  • 下载

【c/c++】银行家算法

1 需求分析   1.1 银行家算法的实现思想      允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某...
  • lzm18064126848
  • lzm18064126848
  • 2017-03-28 18:15:26
  • 1276

银行家算法(Java实现)

银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。我们可以把操作系统看作是银行家,操作系统管理...
  • u014634576
  • u014634576
  • 2016-09-20 21:52:08
  • 6161

银行家算法的C实现

以下算法只是演示过程,判断是否存在安全序列,如果存在给出一个。 其实个人感觉用C++应该会更容易实现。  对二维数组改日一定要多下功夫研究下啊!!!!!!!!!!!!!!! #include...
  • zhouyelihua
  • zhouyelihua
  • 2011-08-26 04:28:59
  • 8764

银行家算法的C语言实现

近日在学习操作系统,发现国外的教材远比国内的教材更加容易理解,有时感觉操作系统是一个不折不扣的坑,书中的每一句话,其实都需要足够长的代码来描述它。 尤其是在拜读了川合秀实的三十天自制操作系统后,感觉...
  • u011587666
  • u011587666
  • 2015-03-16 19:57:44
  • 5854

银行家算法简述解析

背景简介: 在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时...
  • only06
  • only06
  • 2016-11-28 17:38:54
  • 22324
收藏助手
不良信息举报
您举报文章:银行家算法
举报原因:
原因补充:

(最多只允许输入30个字)