// C++/CSIM Model of M/M/K queue #include "cpp.h" // class definitions #define NARS 50000 #define IAR_TM 0.2 // arrival rate is 10 times of previous M/M/1 #define SRV_TM 1.0 #define K 10 // number of server event done("done"); // the event named done facility_ms f("facility", K); // the facility named f table tbl("resp tms"); // table of response times qhistogram qtbl("num in sys", 10l); // qhistogram of number in system int cnt; // count of remaining processes void traffic(); void customer(); extern "C" void sim(int, char **); void sim(int argc, char *argv[]) { set_model_name("M/M/K Queue"); create("sim"); cnt = NARS; traffic(); // generate traffic done.wait(); // wait for last customer to depart report(); // model report mdlstat(); // model statistics } void traffic() { create("traffic"); for (int i=1; i<= NARS;i++){ hold(expntl(IAR_TM)); customer(); } } void customer() // arriving customer { double t1; create("cust"); t1 = clock; // record start time qtbl.note_entry(); // note arrival f.reserve(); // reserve facility hold(expntl(SRV_TM)); // service interval f.release(); // release facility tbl.record(clock - t1); // record response time qtbl.note_exit(); // note departure if(--cnt == 0) done.set(); // if last customer, set done }