结构体信号量解决进程同步/互斥问题

问题描述:

桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,那么四人之间的同步关系是什么?在并发下如何实现四人正确活动的程序?

四人之间的关系:

1爸爸,妈妈都要使用盘子,所以两者是互斥关系; 2爸爸放的苹果,女儿吃,所以两者是同步关系; 3妈妈放的桔子,儿子吃,所以两者也是同步关系。

实现

mutex互斥信号量来控制对盘子的访问,用empty,orange,apple分别代表以上同步关系(只有判空,才能爸妈进行水果的放取,只有orange,儿子才能来吃,只有apple,女儿才能进行吃苹果的活动)。

mother:
    while(true) {
        P(empty);
        P(mutex);
        放入桔子(cs代码段)
        V(mutex)
        V(orange);
    }

father:
    while(true) {
        P(empty);
        P(mutex);
        //放入苹果(cs代码段)
        V(mutex)
        V(apple);
    }

son:
    while(true) {
        P(orange)
        P(mutex)
        //取桔子(cs代码段)
        V(mutex);
        V(empty);
    }
    
daughter:
    while(true) {
        P(apple)
        P(mutex)
        //取苹果(cs代码段)
        V(mutex);
        V(empty);
    }
	
main(){
    Semaphore mutex = 1;    //互斥信号量
    Semaphore empty = 1, orange = apple = 0;   //同步关系
	
	cobegin
	   father();mother();son();daughter();
	coend
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值