www.pudn.com > 模拟银行家算法.zip > Banker.h


// Banker.h -- definitions for the Banker's algorothm 
// David L. Clarke	6 June 1998 
// Modified by Steve Skrabacz Nov 1998 again September 1999 
 
#ifndef BankerH 
#define BankerH 
 
#include  
 
using namespace std; 
 
class BankerUnsafeException {}; 
class BankerUnsafePidException : public BankerUnsafeException{}; 
class BankerUnsafeContractException : public BankerUnsafeException{}; 
class BankerUnsafeTotalException : public BankerUnsafeException{}; 
class BankerUnsafeCommittedException : public BankerUnsafeException{}; 
 
struct Resources 
{ 
   int  iFiles; 
   int  iPages; 
   int  iMutex; 
}; 
 
typedef map< int, Resources, less > ResourcesMap; 
 
class Banker 
{ 
private: 
   Resources  RMax;          // total availabled in whole system 
   Resources RInUse;         // total in use in whole system 
   ResourcesMap RMapMax;     // total contracted with each PID 
   ResourcesMap RMapInUse;   // total in use for a given PID 
 
   void isSafe(int iPid, int iFiles, int iPages, int iMutices); 
 
public: 
  Banker(int iFiles, int iPages,int iMutices); 
  ~Banker(); 
 
   void       openAccount(int iPID,int iFiles, int iPages,int iMutices); 
   void       closeAccount(int iPID); 
 
   void       request(int iPID, int iFiles,int iPages,int iMutices); 
   void       relinquish(int iPID, int iFiles, int iPages, int iMutices); 
 
   void showLimits(); 
   void helloWorld(); 
 
}; 
#endif