【操作系统】--面包师问题


一、问题描述:
面包师有很多面包和蛋糕,由 n 个销售人员销售。
每个顾客进店后先取一个号,并且等着叫号。
当一个销售人员空闲下来,就叫下一个号。
请分别编写销售人员和顾客进程的程序。

二、程序实现
在这个问题中,号码的 “取” 与  “叫” 都属于临界资源,可以设置两个互斥信号量mutex_j mutex_ j分别互斥的“取”、“叫”号。

(本人是一个在校学生,初学者,下面代码是自己写的,有错的话望指出!谢谢。)

semaphore mutex_i = 1; //互斥取号(每个号只能被互斥的“取”)
semaphore mutex_j = 1; //互斥叫号(每个号只能被互斥的“叫”)
semaphore snum1 = n; //销售员数量,开始时没人取号,故初值为n
semaphore cnum2 = 0; //等待被叫号的顾客数量,刚开始时还没开始取号,故初值为0

//顾客进程
consumer()
{
    while(1)
        {
          P(snum1); //看是否有空闲的销售员
          P(mutex_i);  //互斥取号(取号只能一个一个的取)
           取号;
          V(mutex_i);
          V(cnum2);  //等待被叫号的顾客+1  
        }
}

//销售员进程
seller()
{
    while(1)
       {
        P(cnum2);  //看是否有等待被叫号的顾客
        P(mutex_j);  //互斥的叫号
          叫号;
        V(mutex_j);    
        V(snum1);  //空闲的销售员+1
        }
}


 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值