From 9522bce20bc659e43bd6535ec8c7c4f9dffcf460 Mon Sep 17 00:00:00 2001 From: TriantaTV Date: Fri, 30 Sep 2022 01:04:23 -0500 Subject: [PATCH] Fixed using selectedPhilosopher --- DiningPhilosophers.c | 45 ++++++++++++++++++----------------------- DiningPhilosophers.out | Bin 16656 -> 16752 bytes TestDining.sh | 2 +- output.log | 20 ++++++++++++++++++ 4 files changed, 41 insertions(+), 26 deletions(-) create mode 100644 output.log diff --git a/DiningPhilosophers.c b/DiningPhilosophers.c index a8757fe..9c70d35 100644 --- a/DiningPhilosophers.c +++ b/DiningPhilosophers.c @@ -19,20 +19,20 @@ typedef struct PhilosopherData { int position; sem_t semaphore; int state; + pthread_t thread; } PhilosopherData; bool AllPhilosophersFull(PhilosopherData PhilosopherList[], int numPhilosophers); void Down(); -void Eat(void* philosopherSelected); +void Eat(PhilosopherData* philosopherSelected); int GetPhilosopherCount(char* argv); -int GetAbsolutePosition(PhilosopherData PhilosopherSelected); -void* Philosopher(void* philosopherSelected); +void* Philosopher(void* philosopherPassed); void PhilosopherInit(int philosopherTotal); void PhilosopherListInit(PhilosopherData PhilosopherList[], int philosopherTotal); -void PutForks(void* philosopherSelected); -void TakeForks(void* philosopherSelected); +void PutForks(PhilosopherData* philosopherSelected); +void TakeForks(PhilosopherData* philosopherSelected); bool PhilosopherCanEat(PhilosopherData PhilosopherList[], int selectedPosition, int philosopherTotal); -void Think(void* philosopherSelected); +void Think(PhilosopherData* philosopherSelected); void Up(); /* @@ -91,9 +91,8 @@ void Down() // Add changing state to function // Add increasing eating count functionality // -void Eat(void* philosopherSelected) +void Eat(PhilosopherData* philosopherSelected) { - philosopherSelected. printf("Eat() was called...\n"); } @@ -106,18 +105,13 @@ int GetPhilosopherCount(char* argv) return philosopherTotal; } -// Unused function to be removed -int GetAbsolutePosition(PhilosopherData philosopherSelected) -{ - ; -} - // Takes in the number of philosophers, from 0 to N-1 // Finishes when all philosophers have eaten twice // TODO: // Add splitting function into multiple pthreads -void* Philosopher(void* philosopherSelected) +void* Philosopher(void* philosopherPassed) { + PhilosopherData *philosopherSelected = (PhilosopherData*) philosopherPassed; // Below replaced by PhilosopherData // int philosopherEatingCount[numPhilosophers]; // sem_t philosopherSemaphore[numPhilosophers]; /*one semaphore per philospher*/ @@ -136,22 +130,18 @@ void* Philosopher(void* philosopherSelected) void PhilosopherInit(int philosopherTotal) { PhilosopherData PhilosopherList[philosopherTotal]; - pthread_t PhilosopherThreads[philosopherTotal]; - for (int i = 0; i < philosopherTotal; i++) - pthread_create(&PhilosopherThreads[i], NULL, &Philosopher, &PhilosopherList[i]); - for (int i = 0; i < philosopherTotal; i++) - pthread_join(PhilosopherThreads[i], NULL); + PhilosopherListInit(PhilosopherList, philosopherTotal); while (!AllPhilosophersFull(PhilosopherList, philosopherTotal)) { for (int i = 0; i < philosopherTotal; i++) { - if (PhilosopherCanEat(PhilosopherList, i, philosopherTotal)) { Down(PhilosopherList[i-1].semaphore); Down(PhilosopherList[i].semaphore); } } + break; } } @@ -161,10 +151,13 @@ void PhilosopherListInit(PhilosopherData PhilosopherList[], int philosopherTotal { PhilosopherList[i].position = i; PhilosopherList[i].eatingCount = 0; + sem_init(&PhilosopherList[i].semaphore, 0, 1); + pthread_create(&PhilosopherList[i].thread, NULL, &Philosopher, &PhilosopherList[i]); + pthread_join(PhilosopherList[i].thread, NULL); } } -void PutForks(void* philosopherSelected) +void PutForks(PhilosopherData* philosopherSelected) { printf("PutForks() was called...\n"); // Down(&mutex); /*enter critical region*/ @@ -176,9 +169,10 @@ void PutForks(void* philosopherSelected) } // Takes in a number for a selected philosopher, from 0 to N-1 -void TakeForks(void* philosopherSelected) +void TakeForks(PhilosopherData* philosopherSelected) { printf("TakeForks() was called...\n"); + sem_wait(&philosopherSelected->semaphore); // Down(&mutex); /*enter critical region*/ // PhilosopherList.state = HUNGRY; /*philosopher has finished eating*/ // Test(selectedPhilosopher, ); /*see if left neighbor can now eat*/ @@ -202,11 +196,12 @@ bool PhilosopherCanEat(PhilosopherData PhilosopherList[], int selectedPosition, return true; } -void Think(void* philosopherSelected) +void Think(PhilosopherData* philosopherSelected) { // printf("%d is now thinking.\n", PhilosopherList.position); // PhilosopherList.state = THINKING; /*philosopher has finished eating*/ - printf("Think() was called...\n"); + philosopherSelected->state = THINKING; + printf("Philosopher %d is thinking...\n", philosopherSelected->position); } // Todo: diff --git a/DiningPhilosophers.out b/DiningPhilosophers.out index 43d9529eb2bba69f8385e569525976fb76bb2dde..fe22f52078e38bb9cb06b4f6f225f0863f5defb5 100755 GIT binary patch literal 16752 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 K7gLG crashCompile.log -./DiningPhilosophers.out 5 2> crashLaunch.log +./DiningPhilosophers.out 5 > output.log 2> crashLaunch.log diff --git a/output.log b/output.log new file mode 100644 index 0000000..62264e3 --- /dev/null +++ b/output.log @@ -0,0 +1,20 @@ +Philosopher 0 is thinking... +TakeForks() was called... +Eat() was called... +PutForks() was called... +Philosopher 1 is thinking... +TakeForks() was called... +Eat() was called... +PutForks() was called... +Philosopher 2 is thinking... +TakeForks() was called... +Eat() was called... +PutForks() was called... +Philosopher 3 is thinking... +TakeForks() was called... +Eat() was called... +PutForks() was called... +Philosopher 4 is thinking... +TakeForks() was called... +Eat() was called... +PutForks() was called...