/* The dining philosopher program. */ #include #include /* for calloc() and exit() */ #define N 5 /* number of philosophers */ #define Busy_Eating 1 #define Busy_Thinking 1 #define Left(p) (p) /* chopstick macros */ #define Right(p) (((p) + 1) % N) typedef int * semaphore; semaphore chopstick[N]; /* global array */ int fork(void); semaphore make_semaphore(void); void philosopher(int me); void pick_up(int me); int pipe(int pd[2]); void put_down(int me); int read(int fd, void *buf, unsigned len); void signal(semaphore s); void sleep(unsigned seconds); void wait(semaphore s); int write(int fd, void *buf, unsigned len); int main(void) { int i; for (i = 0; i < N; ++i) { /* put chopsticks on the table */ chopstick[i] = make_semaphore(); signal(chopstick[i]); } for (i = 0; i < N - 1; ++i) /* create philosophers */ if (fork() == 0) break; philosopher(i); /* all executing concurrently */ return 0; }