From 5bf764f5370f8727bf30bfcc2e6187c448971a4f Mon Sep 17 00:00:00 2001 From: Brychan Dempsey Date: Wed, 28 Apr 2021 17:54:37 +1200 Subject: [PATCH] Woirking? --- assignment2 | Bin 0 -> 22336 bytes assignment2_handout.c | 39 +++++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 assignment2 diff --git a/assignment2 b/assignment2 new file mode 100644 index 0000000000000000000000000000000000000000..d9efe6d7877268b515ea7a3ed88ac54e404ed069 GIT binary patch literal 22336 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 G;=cjqA}`+n literal 0 HcmV?d00001 diff --git a/assignment2_handout.c b/assignment2_handout.c index d231ad9..22ab8c1 100644 --- a/assignment2_handout.c +++ b/assignment2_handout.c @@ -11,9 +11,9 @@ // -------------------------------------------------- // Define Problem Size // -------------------------------------------------- -#define NLIFTS 20 // The number of lifts in the building +#define NLIFTS 4 // The number of lifts in the building #define NFLOORS 20 // The number of floors in the building -#define NPEOPLE 200 // The number of people in the building +#define NPEOPLE 3 // The number of people in the building #define MAXNOINLIFT 10 // Maximum number of people in a lift @@ -78,9 +78,9 @@ typedef struct { int stops[NFLOORS]; // How many people are going to each floor semaphore stopsem[NFLOORS]; // People in the lift wait on one of these // Semaphore stating if a thread is currently loading/unloading someone from the lift - semaphore loading; + //semaphore loading; // If the target floor is being selected (only one can press at a time) - semaphore buttonPress; + //semaphore buttonPress; } lift_info; // -------------------------------------------------- @@ -102,7 +102,7 @@ void print_at_xy(int x, int y, const char *s) { gotoxy(x,y); // Slow things down - Sleep(1); + Sleep(0); // Print the string printf("%s", s); @@ -176,6 +176,7 @@ void get_into_lift(lift_info *lift, int direction) { // Wait for person to get into lift Sleep(GETINSPEED); + // Need a sem here targetLift[lift->position] = lift; semaphore_signal(s); } else { @@ -200,8 +201,8 @@ void* lift_thread(void *p) { lift.direction = UP; // Lift starts going up lift.peopleinlift = 0; // Lift starts empty // lift is ok with loading a single person - semaphore_create(&lift.loading, 1); - semaphore_create(&lift.buttonPress, 1); + //semaphore_create(&lift.loading, 1); + //semaphore_create(&lift.buttonPress, 1); for(i = 0; i < NFLOORS; i++) { lift.stops[i]=0; // No passengers waiting @@ -215,7 +216,7 @@ void* lift_thread(void *p) { Sleep(rnd(1000)); // Loop forever - while(TRUE) { + while(true) { // Print current position of the lift print_at_xy(no*4+1, NFLOORS-lift.position, lf); // Wait for a while @@ -224,14 +225,14 @@ void* lift_thread(void *p) { // Drop off passengers on this floor while (lift.stops[lift.position] != 0) { // One less passenger in lift - semaphore_wait(&lift.loading); + //semaphore_wait(&lift.loading); lift.peopleinlift--; - semaphore_signal(&lift.loading); + //semaphore_signal(&lift.loading); // One less waiting to get off at this floor // Don't need a semaphore as nothing should read this value now - semaphore_wait(&lift.buttonPress); + //semaphore_wait(&lift.buttonPress); lift.stops[lift.position]--; - semaphore_signal(&lift.buttonPress); + //semaphore_signal(&lift.buttonPress); // Wait for exit lift delay Sleep(GETOUTSPEED); @@ -285,7 +286,7 @@ void* person_thread(void *p) { randomise(); // Stay in the building forever - while(TRUE) { + while(true) { // Work for a while Sleep(rnd(PEOPLESPEED)); do { @@ -294,10 +295,11 @@ void* person_thread(void *p) { } while(to == from); semaphore* s; // Wait for our turn to press a button - semaphore_wait(&floors[from].queueInteraction); + // Check which direction the person is going (UP/DOWN) if(to > from) { // One more person waiting to go up + semaphore_wait(&floors[from].queueInteraction); floors[from].waitingtogoup++; //volatile int pos = floors[from].waitingtogoup +floors[from].waitingtogodown - floors[from].inprogress_down - floors[from].inprogress_up; print_at_xy(NLIFTS*4+ floors[from].waitingtogoup +floors[from].waitingtogodown,NFLOORS-from, pr); @@ -307,6 +309,7 @@ void* person_thread(void *p) { s = &floors[from].up_arrow; // Wait for a lift to arrive (going up) } else { + semaphore_wait(&floors[from].queueInteraction); // One more person waiting to go down floors[from].waitingtogodown++; //volatile int pos = floors[from].waitingtogoup +floors[from].waitingtogodown - floors[from].inprogress_down - floors[from].inprogress_up; @@ -327,9 +330,9 @@ void* person_thread(void *p) { // Add one to passengers waiting for floor // Only one person enters at a time - semaphore_wait(&lift->buttonPress); + //semaphore_wait(&lift->buttonPress); lift->stops[to]++; - semaphore_signal(&lift->buttonPress); + //semaphore_signal(&lift->buttonPress); // Press button if we are the first if(lift->stops[to]==1) { // Print light for destination @@ -393,7 +396,7 @@ void printbuilding(void) { // Iterate through the floors and update the queue size // -------------------------------------------------- void* update_floor_counts(void *p){ - while(TRUE){ + while(true){ int i; for (i = 0; i < NFLOORS; i++){ char str[12]; @@ -403,7 +406,7 @@ void* update_floor_counts(void *p){ } } - Sleep(16); + Sleep(0); }