⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elevator_me.h

📁 linux的例子,就是下载后到自己的机子上去运行
💻 H
字号:
/*

Here are the method signatures for the Elevator and Building classes.
You should feel free to add to these classes, but do not change the
existing interfaces.

*/
#include"EventBarrier.h"
#include"synch-sleep.h"

#include "thread.h"
#include "system.h"
typedef enum{UP,DOWN,STOP}ElevSTATE;
class Elevator {
   public:
     Elevator(char *debugName, int numFloors, int myID);
     ~Elevator();
     char *getName() { return name; }
   
     // elevator control interface: called by Elevator thread
     void OpenDoors();                //   signal exiters and enterers to action
     void CloseDoors();               //   after exiters are out and enterers are in
     void VisitFloor(int floor);      //   go to a particular floor
   
     // elevator rider interface (part 1): called by rider threads.
     bool Enter();                    //   get in
     void Exit();                     //   get out (iff destinationFloor)
     void RequestFloor(int floor);    //   tell the elevator our destinationFloor
   
     // insert your methods here, if needed
     void init(EventBarrier **barrier1,EventBarrier **barrier2,Semaphore *w,int *p){
		upbarrier = barrier1; 
		downbarrier = barrier2;
		wait=w;
		people = p;
 }
     int NextFloor();
     int GetID(){return elevID;}
     int GetCurrentFloor(){return currentfloor;}
     int GetCurrentOccu(){return occupancy;}
     void SetState(ElevSTATE s){elevstate=s;}
     ElevSTATE GetState(){return elevstate;}
   private:
     char *name;
   
     int currentfloor;           // floor where currently stopped
     int occupancy;              // how many riders currently onboard
   
     // insert your data structures here, if needed
     int numfloors;
     int elevID;
     int fullnum;
     int *dstfloor;
     int *people;
     Lock *elevlock;
     Condition **elevcond;
     ElevSTATE elevstate;
     EventBarrier **upbarrier;
     EventBarrier **downbarrier;
     Semaphore *wait;
};
   
class Building {
   public:
     Building(char *debugname, int numFloors, int numElevators);
     ~Building();
     char *getName() { return name; }
   
   				
     // elevator rider interface (part 2): called by rider threads
     void CallUp(int fromFloor);      //   signal an elevator we want to go up
     void CallDown(int fromFloor);    //   ... down
     Elevator *AwaitUp(int fromFloor); // wait for elevator arrival & going up
     Elevator *AwaitDown(int fromFloor); // ... down
     Elevator *GetElevator(int id){return elevator[id];}
     int GetElevatorNum(){return numelevators;}
   private:
     char *name;
     Elevator **elevator;         // the elevators in the building (array)
     // insert your data structures here, if needed
     int numelevators;
     int numfloors;
     int people;
     EventBarrier **upbarrier;
     EventBarrier **downbarrier;
     Semaphore *wait;
};

   // here's a sample portion of a rider thread body showing how we
   // expect things to be called.
   //
   // void rider(int id, int srcFloor, int dstFloor) {
   //    Elevator *e;
   //  
   //    if (srcFloor == dstFloor)
   //       return;
   //  
   //    DEBUG('t',"Rider %d travelling from %d to %d\n",id,srcFloor,dstFloor);
   //    do {
   //       if (srcFloor < dstFloor) {
   //          DEBUG('t', "Rider %d CallUp(%d)\n", id, srcFloor);
   //          building->CallUp(srcFloor);
   //          DEBUG('t', "Rider %d AwaitUp(%d)\n", id, srcFloor);
   //          e = building->AwaitUp(srcFloor);
   //       } else {
   //          DEBUG('t', "Rider %d CallDown(%d)\n", id, srcFloor);
   //          building->CallDown(srcFloor);
   //          DEBUG('t', "Rider %d AwaitDown(%d)\n", id, srcFloor);
   //          e = building->AwaitDown(srcFloor);
   //       }
   //       DEBUG('t', "Rider %d Enter()\n", id);
   //    } while (!e->Enter()); // elevator might be full!
   //  
   //    DEBUG('t', "Rider %d RequestFloor(%d)\n", id, dstFloor);
   //    e->RequestFloor(dstFloor); // doesn't return until arrival
   //    DEBUG('t', "Rider %d Exit()\n", id);
   //    e->Exit();
   //    DEBUG('t', "Rider %d finished\n", id);
   // }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -