//============================================== file = mm1_csim_simple.c ===== //= A simple CSIM simulation of an M/M/1 queueing system = //============================================================================= #include // Needed for printf() #include "csim.h" // Needed for CSIM18 stuff //----- Defines --------------------------------------------------------------- #define SIM_TIME 1.0e7 // Total simulation time in seconds //----- Globals --------------------------------------------------------------- FACILITY Server; // Declaration of CSIM Server facility //----- Prototypes ------------------------------------------------------------ void generate(double lambda, double mu); // Customer generator void queue1(double service_time); // Single server queue //============================================================================= //== Main program == //============================================================================= void sim(void) { double lambda; // Mean arrival rate (cust/sec) double mu; // Mean service rate (cust/sec) // Create the simulation create("sim"); // CSIM initializations Server = facility("Server"); // Parameter initializations lambda = 0.5; mu = 1.0; // Initiate generate function and hold for SIM_TIME generate(lambda, mu); hold(SIM_TIME); // Output results report(); } //============================================================================= //== Function to generate Poisson customers == //============================================================================= void generate(double lambda, double mu) { double interarrival_time; // Interarrival time to next send double service_time; // Service time for this customer create("generate"); // Loop forever to create customers while(1) { // Pull an interarrival time and hold for it interarrival_time = exponential(1.0 / lambda); hold(interarrival_time); // Pull a service time and then send the customer to the queue service_time = exponential(1.0 / mu); queue1(service_time); } } //============================================================================= //== Function for single server queue == //============================================================================= void queue1(double service_time) { create("queue1"); // Reserve, hold, and release server reserve(Server); hold(service_time); release(Server); }