IPC经典问题

    最近准备潜心研究操作系统,经过自己的精挑细选,我选择了Minix,主要原因是Minix很精简,可以学习到很多本质的东西。

而讲Minix的书籍《操作系统_设计与实现》也是当年linus torvalds创造Linux的思想源泉。刚看了此书一章多,觉得此书写得非常经典。

看完本书讲了IPC经典问题:哲学家进餐问题,读者-写者问题,理发师理发问题。

这些经典问题主要解决了进程间竞争资源问题,提出了进程同步的设计模型。

以下是理发师理发问题伪代码:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->  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  }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值