PV操作每日一题-独木桥问题

本文介绍了如何解决东西方向汽车过独木桥的问题,利用读者写者问题的思路,通过信号量实现汽车的互斥访问。每个方向的汽车在上桥和下桥时都会进行信号量操作,确保桥上无车时才能通行。汽车的进出计数和桥的使用权通过互斥锁来控制,保证了安全性。这是一个经典的并发控制问题的应用实例。
摘要由CSDN通过智能技术生成


在这里插入图片描述

一、问题描述

东西方向汽车过独木桥,为保证安全,只要桥上无车,则允许一方的汽车过桥,待另一方的车全部过完后,另一方的车才允许过桥。

不难发现,是读者写者问题


二、问题求解

🔑:

int eastCount=0;        //当前从东边上桥的汽车数量
int westCount=0;        //当前从西边上桥的汽车数量
semaphore bridge=1;     //两边的车互斥申请桥
semaphore eastMutex=1;  //互斥访问eastCount
semaphore westMutex=1;  //互斥访问westCount

East()
{
    while(1)
    {
        P(eastMutex);
        if(eastCount==0)
        {
            P(bridge);
        }
        eastCount++;
        V(eastMutex);
        从东边过桥;

        P(eastMutex);
        eastCount--;
        if(eastCount==0)
        {
            V(bridge);
        }
        V(eastMutex);
    }
}

West()
{
    while(1)
    {
        P(westMutex);
        if(westCount==0)
        {
            P(bridge);
        }
        westCount++;
        V(eastMutex);
        从西边过桥;

        P(westMutex);
        westCount--;
        if(westCount==0)
        {
            V(bridge);
        }
        V(westMutex);
    }
}


三、碎碎念

没有什么太多新鲜的,无非是第一个上桥的汽车申请bridge资源,最后一个下桥的汽车释放bridge资源,访问xCount的时候互斥访问即可。
就到这里,溜啦~

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森格的博

创作不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值