哲学家就餐问题

 1 # define N 5
 2 # define LEFT (i + N - 1) % N
 3 # define RIGHT (i + 1) % N
 4 # define THINKING 0
 5 # define HUNGRY 1
 6 # define EATING 2
 7 typedef int semaphore;
 8 int state[N];
 9 semaphore mutex = 1;
10 semaphore s[N];
11 
12 void philosopher(int i){
13     while(TRUE){
14         think();
15         take_two(i);
16         eat();
17         put_now(i);
18     }
19 }
20 
21 void take_two(int i){
22     down(&mutex);
23     state[i] = HUNGRY;
24     test(i);
25     up(&mutex);
26     down(&s[i]);
27 }
28 
29 void put_two(i){
30     down(&mutex);
31     state[i] = THINKING;
32     test(LEFT);
33     test(RIGHT);
34     up(&mutex);
35 }
36 
37 void test(i){               //尝试拿起两把筷子
38     if(state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING){
39         state[i] = EATING;
40         up(&s[i]);
41     }
42 }

 

上一篇:房价预测Task5-7


下一篇:python高级并发编程教程-同步线程