IPC经典问题

本文介绍了使用Minix操作系统进行学习的经验分享,详细解析了进程间的竞争资源问题,并通过经典案例——理发师理发问题,深入探讨了进程同步的设计模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近准备潜心研究操作系统,经过自己的精挑细选,我选择了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 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值