From 38da411a83d9eaf9c526a080867e34c3e6039298 Mon Sep 17 00:00:00 2001 From: TriantaTV Date: Fri, 30 Sep 2022 15:39:21 -0500 Subject: [PATCH] Removed useless comments and old code --- DiningPhilosophers.c | 56 +++++++++++++++-------------------------- DiningPhilosophers.out | Bin 16720 -> 16768 bytes TestDining.sh | 2 +- 3 files changed, 21 insertions(+), 37 deletions(-) diff --git a/DiningPhilosophers.c b/DiningPhilosophers.c index 787ea1d..9022677 100644 --- a/DiningPhilosophers.c +++ b/DiningPhilosophers.c @@ -5,9 +5,6 @@ #include #include -// #define N 5 /*number of philosophers*/ -// #define LEFT (i+N-1)%N /*number of i's left neighbor*/ -// #define RIGHT (i+1)%N /*number of i's right neighbor*/ #define THINKING 0 /*philosopher is thinking*/ #define HUNGRY 1 /*philosopher is trying to get forks*/ #define EATING 2 /*philosopher is eating*/ @@ -23,7 +20,7 @@ typedef struct PhilosopherData { } PhilosopherData; bool AllPhilosophersFull(PhilosopherData PhilosopherList[], int numPhilosophers); -void Down(); +void Down(sem_t* semaphore); void Eat(PhilosopherData* philosopherSelected); int GetPhilosopherCount(char* argv); void* Philosopher(void* philosopherPassed); @@ -33,18 +30,16 @@ void PutForks(PhilosopherData* philosopherSelected); void TakeForks(PhilosopherData* philosopherSelected); bool PhilosopherCanEat(PhilosopherData PhilosopherList[], int selectedPosition, int philosopherTotal); void Think(PhilosopherData* philosopherSelected); -void Up(); +void Up(sem_t* semaphore); /* * Todo: - * Add prints to each state change * Fix each function's requirements * Theories: * Threads should be put to sleep if can't eat * Sleep has to be awoken by something else, process can't wake own thread * Place semaphores so states can be checked by all * Total fork count = N / 2 - * */ int main(int argc, char* argv[]) @@ -73,21 +68,18 @@ bool AllPhilosophersFull(PhilosopherData PhilosopherList[], int numPhilosophers) return true; } -// +// Takes a pointer to a philosopher and puts semaphore into waiting state. // TODO: // Turn function into picking up forks (starting waits) // (Right fork is owned by selectedPhilosopher number for consistency) // Add sem_wait -void Down() +void Down(sem_t* semaphore) { - printf("Down() was called...\n"); + sem_wait(semaphore); + printf("A semaphore was put into waiting...\n"); } -// -// TODO: -// Add changing state to function -// Add increasing eating count functionality -// +// Sets philosopher to eating state and increments eating count. void Eat(PhilosopherData* philosopherSelected) { printf("Philosopher %d is eating...\n", philosopherSelected->position); @@ -95,8 +87,7 @@ void Eat(PhilosopherData* philosopherSelected) ++philosopherSelected->eatingCount; } -// Takes in char* and converts into a number -// Returns a number +// Converts char* to number. int GetPhilosopherCount(char* argv) { int philosopherTotal; @@ -104,18 +95,10 @@ int GetPhilosopherCount(char* argv) return philosopherTotal; } -// 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 +// Main function that each thread runs. void* Philosopher(void* philosopherPassed) { PhilosopherData *philosopherSelected = (PhilosopherData*) philosopherPassed; - // Below replaced by PhilosopherData - // int philosopherEatingCount[numPhilosophers]; - // sem_t philosopherSemaphore[numPhilosophers]; /*one semaphore per philospher*/ - // // array to keep track of everyone's state - // int philosopherState[numPhilosophers]; while (true) { Think(philosopherSelected); /*philosopher is thinking*/ @@ -126,6 +109,7 @@ void* Philosopher(void* philosopherPassed) } } +// Handles all philosopher threads, finishes when all philosophers are full. void PhilosopherInit(int philosopherTotal) { PhilosopherData PhilosopherList[philosopherTotal]; @@ -136,11 +120,10 @@ void PhilosopherInit(int philosopherTotal) { if (PhilosopherCanEat(PhilosopherList, i, philosopherTotal)) { - Down(PhilosopherList[i-1].semaphore); - Down(PhilosopherList[i].semaphore); + Up(&(PhilosopherList[i-1].semaphore)); + Up(&(PhilosopherList[i].semaphore)); } } - break; } } @@ -167,11 +150,11 @@ void PutForks(PhilosopherData* philosopherSelected) // Up(&mutex); /*block if forks were not acquired*/ } -// Takes in a number for a selected philosopher, from 0 to N-1 +// Philosopher takes the forks on the left and right. void TakeForks(PhilosopherData* philosopherSelected) { printf("Philosopher %d is taking forks...\n", philosopherSelected->position); - sem_wait(&philosopherSelected->semaphore); + Down(&philosopherSelected->semaphore); // Down(&mutex); /*enter critical region*/ // PhilosopherList.state = HUNGRY; /*philosopher has finished eating*/ // Test(selectedPhilosopher, ); /*see if left neighbor can now eat*/ @@ -179,9 +162,9 @@ void TakeForks(PhilosopherData* philosopherSelected) // Down(&philosopherSemaphore[selectedPhilosopher]); /*exit critical region*/ } -// Takes in the number of philosophers, from 0 to N-1 -// Checks if left and right philosopher is not eating, -// and philosopher is hungry, then philosopher will eat +// If philosopher is hungry and forks are free, then returns true. +// Else, philosopher returns false. +// Left philosopher math: (i+N-1)%N Right philosopher math: (i+1)%N bool PhilosopherCanEat(PhilosopherData PhilosopherList[], int selectedPosition, int philosopherTotal) { if (PhilosopherList[selectedPosition].state != HUNGRY) @@ -206,7 +189,8 @@ void Think(PhilosopherData* philosopherSelected) // Todo: // Make function release hold on semaphore // Use 'sem_post' -void Up() +void Up(sem_t* semaphore) { - printf("Up() was called...\n"); + sem_post(semaphore); + printf("A semaphore was released...\n"); } diff --git a/DiningPhilosophers.out b/DiningPhilosophers.out index bab73814aabb0e6a9674b146509aca45fad04725..36d8c49c261b2706e0c2e3acd484f8378ecf4df7 100755 GIT binary patch delta 2888 zcmai04Nz276ux(VShhg+@#A9&c?(3k8M`cqXt1*W?C>xfWs0#;i)9iMCxvt=)Cv%F zmKLYgGnRid($q{@PQh$7PNm`Kn9lTrWxrE1SY}J2i8>`lz0Q5_zRhTw?#z4NJ?DJq zoO{pxd2e77ZSSO!Od%i;wfQt4{o9={TjfMel0l$p+lRBQqg*kH3is@oQ8VjEY?@3F z67Xp))Z|w0KXI2qlY5|pib9C9LYx(X1N0N&_FRn}nsY=ctw=*&gSE-FbI_d&ODO2!0?sSl2j4mHCBIAyG)??Q)31c#}Ju7MGwNZZ&O z7MU{XmuRV@=i#jBVB)%l)pgBH>w?g2-q~irPzGWoCVW`mjBj1X(wN9rOu$P*#Ky*C zf}9A~rK_@u?BQ}tR-=_*q?fq-=Jw~Xga*=!GHZGb`2rB1JykQb^Rnp%k_zu6EV0K$ zWL>V*sBBG=pwJ>FvqI=C0yU`F#W@yKo8Uo<2;G*X)oJ8XH0OWcH9Q3{sAowjE(Rp)(LvYT&54G1;xKgCe>KNs1-u0-Fx0%;6n0Y;zA&1S= zS$|7^(5eikNbQVxj3e@^RetFlcumNrW;iM2IL)XcEmLddPVe_@ugYCN29xBl_dE)* z-G3@dY&lNhg!wy2Nu54#KQ6P}^+Bu&4V_O78=g+V^sjQ|60U4<$YKAW+}WQfhgJ3u z7`Mwm7WR*!>w4%)T?HF6ZxvafSN~8H3~?I|@fwQY6Qv31n&J?8lGt8wrOlu6brQ?{ zF?wm*0CL0rYjU{u`f_<{dchQ=2F)=$^rRIOY&9V{?7z-(Y{ZkS_w#WwdcP$4bDEE~ z9Y((kPk-P)!*X3%9j^T_eD4`H12tD{E}p*4{lS{B|4e6$$`237T?6vbL8I){AY3~r z(*bq1m@5TyA@l!eF$~)2KSPl^z1;udlVQxNru>2pxPJ_*dzo(TPua2p$Gf2GTm+3V zoTW*hOM5pjMdL3bNU?JR^B?ofEWNL%E#1bJJk6^rbZKGPD zrGID_qE@XATRV(W{X4uaUJ&lay&U)SUspZFEJm1)0xsVj8X@-EZ@Ak}9gCjKOtw-Db$q*oQ?TRN4H->)eOUPq+pS4D9k1`vISJ%|CsI-FNK;vU$YJDG;yXs&23 z!ol>wce(lW6`*`VRErdjwABNd=Q|ayM`iagVBQW2edZGet)hyBTd)AtPU+ ziBO8~OsK{83~0gkm#{Nm%D95F{#VZE>HO!db|1fg2}hQPwXLwbP!fhSHOa04X@ygT z5^aZ}LO1n+-6i3d0`7LXgjRlAV(HZO6|8qjLNmW+_1m@=4!9Q50F1gM=I(w3E8O8; zOnc$9`x6?07mCEJe*OjLfk+8<4D9=p3ZE9aFgNvxe~+58LWq=P;P^bADtZpqd)#*Y zL#zk-OzotR+uBYZCl+(kVeUJF z*KI!cRZyP?eTFoe1)fsT>cH!lRpI_przc|^^Y2{Kd|TEEtkvayV& zOhYSiNuf1vg_8q_GBg@sDv?%5oBaV2&_o?9fp!TrCOIlhN|{UBCO> z55bk*{hjkW=bn4+=ewyPKKB)#tyB{#%a?=+EIZtI%LvCZzdYw8=sY<$LhbjIG0Q5^{)6D5Vs# zucnl}l7EqwY?|Y>0zYoo9d8sgzvEl<6UR3PnSy`{voSk9&K!^}Mnvb}_X6d_Fs-i- zIXKt>$(7}GI~$hzo~k}KL!{@W{_^m*F_8*823-_uCgn1)s!)k(I4CF2GAyX{deNr> zPScvNFLjuTSeZMh+o^Fc?R9GOoYUhyDs95wPRGH%1a|x;wus(vY5^;}h%|YV)lFWP zMjn^PJ9iW7nOLm*w{yf_>)IM+>^-A?8-2+C^)?7`=)T|v#{TJB^*;2okz4g&-=_aE zLNoqP({{C{Yd1`ncSL-_{UQmbAC4aZqaSvR2>8hIK)IfAJR;<;P7b(@1z#{F{7y@R ze_!6eZ7cmwt>*QVQ&%D7ngiV*emn*$y_6EA|28~cx8E5o+$G69Aw82^(1#{ndM58Zi@53JwM_CFnm$frCA)lw z9S_P@v)2tHOZzG-Xk)3X_&$^U8CtO1DcV}v)o|S-`g{%Dn(P1?WRjQlOz-k`{hqS= z2DlD5a&ek3t*;-m!#R^&7D>K1GifP|0|VN{E+XYVl6~}s%R`edCf3>B@!2ThCoL+r?_^nT7v@y&P*h=Vi@$W z77X6P_JGY#lUO`7_pi_??VV^lc7LJeN0*Vv%xSTId$C)v0i-$S5th%KW)l}H%be8X zx^pDdscv}cna?*ghMw87JG5=f6Hh$8ojx1-{$OwaEnFlb_8$MBtvw4A7joIVhVcsU zN5G4~mw|TNV6B%7<0a@dONLPm{Qz(c@B;8r;4<(z-~;a&#`l0nfWH8~3H%#SxndYh zsbehmFT)676?Xy?z+=G8z#Uf&BLy6#6XCmSQt0+BbjLP0^EcU@5L@x-{}8+OO1Q3N z9Fld(3CA*g1NeRnJ_WQ&HH1U>R^Fwq+Esi#_0a{2Z?Coa@|*NycG1*}VTLH-jFEMNB0a8pp7t~9lPWK%TN6yyhKu_?+M zNR0%QtBhJA5j7>RLXoE^lk{{XsP@P^*}9suG#Yt`Cuk`W+a#dbT+luzs_a z&$+x%$~-iM2v*LP^%{f{bn_rBHFxk?YHoSR{kHt)R8hL+ZvF*2(W3EbnrVsh-L%ru z^q8L=ms6BqR79A<42mc(mYQ)l%J65w`xz!OAqfeuOaCS5pI>U&-UgrlOMh$ylBxul z>$a9fm~0h&v5*-G7h%4XgBKZ)%>9#+Z=|PNHEct*RSTSxy(Z*T=XX5(bXo`NCuD?1 z8DW=4xlIcf;WjT(JU3nx(&`aB#vB+(*M^c1P(iYZ0$wH6=Ry zZtJackT!K7yTY^aNJp%2=2CcIh?1hk4g<$>F%ffbZZo-Z3a^W~_uOY{RW#Zj{4X@B BwOs%J diff --git a/TestDining.sh b/TestDining.sh index 3409c1f..e91dfe0 100755 --- a/TestDining.sh +++ b/TestDining.sh @@ -1,4 +1,4 @@ #!/bin/bash rm DiningPhilosophers.out gcc DiningPhilosophers.c -o DiningPhilosophers.out 2> crashCompile.log -./DiningPhilosophers.out 5 > output.log 2> crashLaunch.log +./DiningPhilosophers.out 5