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 }

 

 

posted on 2008-12-20 18:56  john.huang  阅读(1406)  评论(0编辑  收藏  举报

导航