
hash tag define N 5 forward slash asterisk number of philosophers asterisk forward slash
hash tag define LEFT open parenthesis i+N minus 1 close parenthesis %N forward slash asterisk number of i's left neighbor asterisk forward slash
hash tag define RIGHT open parenthesis i+1 close parenthesis %N forward slash asterisk number of i's right neighbor asterisk forward slash
hash tag define THINKING 0 forward slash asterisk philosopher is thinking asterisk forward slash
hash tag define HUNGRY 1 forward slash asterisk philosopher is trying to get forks asterisk forward slash
hash tag define EATING 2 forward slash asterisk philosopher is eating asterisk forward slash
typedef int semaphore semicolon forward slash asterisk semaphores are a special kind of int asterisk forward slash
int state open box bracket N close box bracket semicolon forward slash asterisk array to keep track of everyone's state asterisk forward slash
semaphore mutex equals 1 semicolon forward slash asterisk mutual exclusion for critical regions asterisk forward slash
semaphore s open box bracket N close box bracket semicolon forward slash asterisk one semaphore per philosopher asterisk forward slash
void philosopher open parenthesis int i close parenthesis forward slash asterisk i colon philosopher number coma from 0 to N minus 1 asterisk forward slash
open curly bracket
while open parenthesis TRUE close parenthesis open curly bracket forward slash asterisk repeat forever asterisk forward slash
think open close parenthesis semicolon forward slash asterisk philosopher is thinking asterisk forward slash
take underscore forks open parenthesis i close parenthesis semicolon forward slash asterisk acquire two forks or block asterisk forward slash
eat open close parenthesis semicolon forward slash asterisk yum dash yum coma spaghetti asterisk forward slash
put underscore forks open parenthesis i close parenthesis semicolon forward slash asterisk put both forks back on table asterisk forward slash
close curly bracket
close curly bracket
void take underscore forks open parenthesis int i close parenthesis forward slash asterisk i colon philosopher number coma from 0 to N minus 1 asterisk forward slash
open curly bracket
down open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk enter critical region asterisk forward slash
state open box bracket i close box bracket equals HUNGRY semicolon forward slash asterisk record fact that philosopher i is hungry asterisk forward slash
test open parenthesis i close parenthesis semicolon forward slash asterisk try to acquire 2 forks asterisk forward slash
up open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk exit critical region asterisk forward slash
down open parenthesis ampersand s open box bracket i close box bracket close parenthesis semicolon forward slash asterisk block if forks were not acquired asterisk forward slash
close curly bracket
void put underscore forks open parenthesis i close parenthesis forward slash asterisk i colon philosopher number coma from 0 to N minus 1 asterisk forward slash
open curly bracket
down open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk enter critical region asterisk forward slash
state open box bracket i close box bracket equals THINKING semicolon forward slash asterisk philosopher has finished eating asterisk forward slash
test open parenthesis LEFT close parenthesis semicolon forward slash asterisk see if left neighbor can now eat asterisk forward slash
test open parenthesis RIGHT close parenthesis semicolon forward slash asterisk see if right neighbor can now eat asterisk forward slash
up open parenthesis ampersand mutex close parenthesis semicolon forward slash asterisk exit critical region asterisk forward slash
close curly bracket
void test open parenthesis i close parenthesis forward slash asterisk i colon philosopher number coma from 0 to N minus 1 asterisk forward slash
open curly bracket
if open parenthesis state open box bracket i close box bracket equals equals HUNGRY ampersand ampersand state open box bracket LEFT close box bracket exclamation mark equals EATING ampersand ampersand state open box bracket RIGHT close box bracket exclamation mark equals EATING close parenthesis open curly bracket
state open box bracket i close box bracket equals EATING semicolon
up open parenthesis ampersand s open box bracket i close box bracket close parenthesis semicolon
close curly bracket
close curly bracket
Back