以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 计算机考研交流 』   (http://bbs.xml.org.cn/list.asp?boardid=67)
----  用PV操作来解决音乐爱好者问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=67&rootid=&id=57899)


--  作者:locks-primitive
--  发布时间:1/10/2008 12:09:00 PM

--  用PV操作来解决音乐爱好者问题
紧急求助:用PV操作来解决音乐爱好者问题:

在一间酒吧里有三个音乐爱好者,第一位音乐爱好者只有随身听,第二位只有音乐CD,第三位只有电池,面要听音乐就必须随身听,音乐CD,电池这三种物品俱全,酒吧老板一次出借这三种物品中的任意两种,当一名音乐爱好者得到这三种物品并听完一首歌曲后,酒吧老板才能再一次出借这三种物品中的任意两种,于是第二名音乐爱好者得到这三种物品,并开始听乐曲,整个过程就这样下去,试用P,V操作正确完成这一过程!


先谢谢各位啊,希望能给我提供一下答案!


--  作者:EagleSoaring
--  发布时间:1/10/2008 2:54:00 PM

--  
semaphore mode1=0; //缺少音乐CD和电池
semaphore mode2=0;
semaphore mode3=0;
semaphore musician=0; //向老板借物品的音乐爱好者
semaphore wait = 0;

Boss()
{
while(true)
{
    p(musician);//等候音乐爱好者来借
    int prov=genprovide();//出借三种物品中的任意两种;
    if(prov==1)//如果是音乐CD和电池
     v(mode1);
    else if(prov==2) 
       v(mode2);
    else
          v(mode3);
    p(wait); //等待某音乐爱好者归还物品
}
}


--  作者:EagleSoaring
--  发布时间:1/10/2008 2:56:00 PM

--  
musicLover(int i)
{
while(true)
{
    v(musician);//向老板要求借东西
    if(i==1){//如果只有随身听
        p(mode1);//向老板借其他两样物品
       得到其他两样物品;
       听音乐;
     }
    if(i==2){//如果只有音乐CD
      p(mode2);
      得到其他两样物品;
      听音乐;
    }
    if(i==3){//如果只有电池
    p(mode3);
    得到其他两样物品;
    听音乐;
    }
v(wait); //使得老板可以进行下一次借出
}

--  作者:wulin007
--  发布时间:1/10/2008 10:49:00 PM

--  
我感觉正确!呵呵!
--  作者:EagleSoaring
--  发布时间:1/11/2008 2:44:00 PM

--  
我抄来的答案,我还没仔细看呢~~



--  作者:sweepthesky
--  发布时间:1/11/2008 7:22:00 PM

--  
呵呵~~这个问题如果不加其他条件的话是非常简单的,soaringeagle给的答案绝对正确.
这个问题也有其他名字什么吸烟者啊卖肉者什么的, 它最难的变形是限制酒吧老板代码,不能象这个题这样可以将三种组合显式表达出来.再写顾客代码,就是超级难的题了,不过陈老师出的pv没有这种风格的,我感觉陈老师90年代出的pv题是非常有内涵
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
109.375ms