银行家算法的C++实现

转载自:http://apt-blog.net/object_oriented_bankers_alogrithm

 #include    <list>
#include    <iostream>
 
using namespace std;
 
/* “资源”类,包含A、B、C、D四种“资源”
 */
class Resource{
    private:
        int A;
        int B;
        int C;
        int D;
    public:
        Resource(int A, int B, int C, int D);
        Resource operator + (const Resource &res);
        Resource operator - (const Resource &res);
        void operator = (const Resource &res);
        bool operator <= (const Resource &res);
 
    //便于stream输出
    friend ostream &
    operator << ( ostream & os, const Resource & obj )
    {
        os << "A:" << obj.A << " B:" << obj.B <<
            " C:" << obj.C << " D:" << obj.D << endl;
        return os;
    }
};
 
Resource::Resource(int A, int B, int C, int D)
{
    this->A = A;
    this->B = B;
    this->C = C;
    this->D = D;
}
 
Resource 
Resource:: operator + (const Resource &res)
{
    int A = this->A + res.A;
    int B = this->B + res.B;
    int C = this->C + res.C;
    int D = this->D + res.D;
    return Resource(A, B, C, D);
}
 
Resource 
Resource:: operator - (const Resource &res)
{
    int A = this->A - res.A;
    int B = this->B - res.B;
    int C = this->C - res.C;
    int D = this->D - res.D;
    return Resource(A, B, C, D);
}
 
void 
Resource::operator = (const Resource &res)
{
    this->A = res.A;
    this->B = res.B;
    this->C = res.C;
    this->D = res.D;
}
 
bool 
Resource::operator <= (const Resource &res)
{
    return (this->A <= res.A) && (this->B <= res.B) &&
                (this->C <= res.C) && (this->D <= res.D);
}
 
/*“线程”类,带有该“线程”当前拥有的资源Current和“线程”的最大需求Maxmum
 */
class Process {
    public:
        int id;
        Resource Maxmum;
        Resource Current;
    public:
        Process(int i, const Resource &Max, const Resource &Cur);
    friend ostream &
    operator << ( ostream & os, const Process & obj )
    {
        os << "Process " << obj.id << "n" << "MAX " << obj.Maxmum <<
            "CUR " << obj.Current;
        return os;
    }
};
 
Process::Process(int i, const Resource &Max, const Resource &Cur):
    id(i), Maxmum(Max), Current(Cur){}
 
/*
 *  银行家算法实现函数 
 */
int
BankerAlgorithm ()
{
    Resource SystemAvaliable(3,1,0,2);
 
    list<Process> Processes;
 
    Processes.push_back(
                //构建一个“进程”,参数分别为“进程号、当前拥有资源、最大需求资源“
                Process(1,Resource(3,3,2,2),Resource(1,2,0,1)));
    Processes.push_back(
                Process(2,Resource(1,2,3,4),Resource(1,2,3,3)));
    Processes.push_back(
                Process(3,Resource(1,1,5,0),Resource(1,1,2,0)));
 
    while( !Processes.empty() ) {
        bool found = false;
        list<Process>::iterator i = Processes.begin();
        while ( i != Processes.end() ) {
            cout << "---System " << SystemAvaliable;
            cout << "---For Process "<< i->id << ": n" << *i;
            if(i->Maxmum - i->Current <= SystemAvaliable) {
                cout << "---Process " << i->id 
                        << " Could be Terminated.n" << endl;
                SystemAvaliable = SystemAvaliable + i->Current;
                Processes.erase(i);
                found = true;
                break;
            }
            else {
                cout << "---Process " << i->id <<
                    " Could NOT be Terminated Now.n" << endl;
                ++i;
            }
        }
        if( !found ){
            cout << "Fail, It's an UNSAFE state." << endl;
            return 1;
        }
    }
    cout << "OK, It's a SAFE state." << endl;
    return 0;
}
 
int   main ( int argc, char *argv[] )
{
     
  
    BankerAlgorithm();
    getchar();
    getchar();
    return 0;
} 


你可能感兴趣的:(C++,算法,Stream,OS,iterator,iostream)