IPC经典问题
最近准备潜心研究操作系统,经过自己的精挑细选,我选择了Minix,主要原因是Minix很精简,可以学习到很多本质的东西。
而讲Minix的书籍《操作系统_设计与实现》也是当年linus torvalds创造Linux的思想源泉。刚看了此书一章多,觉得此书写得非常经典。
看完本书讲了IPC经典问题:哲学家进餐问题,读者-写者问题,理发师理发问题。
这些经典问题主要解决了进程间竞争资源问题,提出了进程同步的设计模型。
以下是理发师理发问题伪代码:
1
2 #define N 5
3 typedef int semaphore;
4 semaphore mutex=1;//用于互斥
5 semaphore customers=0;//等候客人数信号量
6 semaphore barbers=0;//等待顾客的理发师信号量
7 int wating = 0;//没有理发客人数据量
8
9 //理发师理发
10 void Barber()
11 {
12 while(true)
13 {
14 down(&customers);
15 down(&mutex);
16 wating--;
17 up(&barbers);
18 up(&mutex);
19 //理发-非临界区
20 }
21 }
22 //来理发客人了
23 void customer()
24 {
25 down(&mutex);
26 if(wating<N){
27 wating++;
28 up(&customers);
29 up(&mutex);
30 down(&barbers);//看理发师是否空闲,如果繁忙等待
31 //理发客人等待-非临界区
32 }
33 else
34 {
35 up(&mutex);
36 }
37 }
2 #define N 5
3 typedef int semaphore;
4 semaphore mutex=1;//用于互斥
5 semaphore customers=0;//等候客人数信号量
6 semaphore barbers=0;//等待顾客的理发师信号量
7 int wating = 0;//没有理发客人数据量
8
9 //理发师理发
10 void Barber()
11 {
12 while(true)
13 {
14 down(&customers);
15 down(&mutex);
16 wating--;
17 up(&barbers);
18 up(&mutex);
19 //理发-非临界区
20 }
21 }
22 //来理发客人了
23 void customer()
24 {
25 down(&mutex);
26 if(wating<N){
27 wating++;
28 up(&customers);
29 up(&mutex);
30 down(&barbers);//看理发师是否空闲,如果繁忙等待
31 //理发客人等待-非临界区
32 }
33 else
34 {
35 up(&mutex);
36 }
37 }
posted on 2008-12-20 18:56 john.huang 阅读(1406) 评论(0) 编辑 收藏 举报