现在的位置: 首页 > 综合 > 正文

银行家算法

2018年05月25日 ⁄ 综合 ⁄ 共 2141字 ⁄ 字号 评论关闭

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

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

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] 

【上篇】
【下篇】

抱歉!评论已关闭.