Long description

Back

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