-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmmn.h
58 lines (51 loc) · 1.49 KB
/
mmn.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdbool.h>
#include <time.h>
#include <float.h>
// Define node
typedef struct node{
struct node *next;
double it; // interarrival time
double st; // service time
double at; // arrival time
double dt; // departure time
double wt; // waiting time
int which_server;
} node;
// Define queue
typedef struct queue{
node *head;
node *tail;
int size;
double t; // queue time
double dt; // the departure timm of last person
} queue;
// Define system
typedef struct _system{
double time; // Time variance
double waiting_time; // Waiting time in system
double system_time; // Total time in system
double total_service_time;
queue **servers;
int n; // N servers
double lambda;
double mu;
} _system;
node *node_new(double it, double st); // Create a new node
queue *q_new(); // Create a new queue
_system *system_new(int n, double lambda, double mu);
bool q_insert(queue *q, node *n); // Insert node into queue
node *q_pop(queue *q); // Pop a node out
double rand_exp(double lambda); // Generate exponential RV with lambda rate
double rand_normal(double std, double mean);
void run_service(_system s);
/* Global variables */
double lambda_1, lamda_2, mu; // Parameters for generate exp rv
double samples; // Number of events
int count;
queue *q_system; // Queue which stores all events
void scheduling(_system *s, node *n, queue *q_next_system, FILE *fp);
void show_system();
double get_dt(_system *s);