好好生活@ 2023-03-21 09:17 采纳率: 0%
浏览 32
已结题

PV操作问题请教,谁是这方面的爱好者

5.某银行有人民币储蓄业务由n个柜员负责有1台取号机。
每个顾客进入银行后先取一个号若有人取号则需等他人取完后才能取,取到号后等待叫号
当一个柜员人员空闲下来就叫下一个号。试用P、V操作正确编写柜台人员和顾客进程的程序。

下面是我的回答,是否正确呢?

semaphore m_clerk=1   //柜员自身的互斥 
semaphore m_handout_num=1 //取号机的互斥 
semaphore m_clerk_ready=0  //柜员是否可以服务 
int num_custom=0  //等待的客户数量 
int num_clerk=N  //空闲的柜员数量 

int main()
{
    cobegin:
        clerk();
        custom();
    coend:
}

clerk()
{    
    if(num_custom>0 && num_clerk>0)//检查是否由客户,有则服务 
    { 
        P(m_clerk);
        num_clerk--;
        V(m_clerk_ready);//叫号 
        V(m_clerk);
        //服务
        //P(m_clerk);//完毕,释放该柜员资源 
        //num_clerk++;
        //V(m_clerk);        
    }            
}
custom()
{
    //客户进入
    P(m_handt_num);  //拿票
    num_custom++;
    V(m_handt_num);
    //等柜员
    P(m_clerk_ready) 
    //得到服务 
    P(m_handt_num);//完成服务 
    num_custom--;
    num_clerk++;
    V(m_handt_num);    
}

  • 写回答

1条回答 默认 最新

  • 好好生活@ 2023-03-21 11:33
    关注

    我的疑问主要是:一开始如果都是custom函数,假设M个函数运行了(M>N),则会使m_clerk_ready=-M;然后这个时候开始运行clerk函数,由于限制,最多只能N个clerk进入if中,即执行P(m_clerk_ready) N次,那么m_clerk_ready=N-M<0,那么不就是都阻塞了吗?不知道我的疑问是否成立

    评论

报告相同问题?

问题事件

  • 系统已结题 3月29日
  • 修改了问题 3月21日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度
  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数