我有一个项目,我必须写伪信号量,从下面的文字:并发编程,我该如何构造一个信号量?
“考虑在一个单一的出租车正在曼联和利物浦的支持者从市中心到周六足球比赛的场景。出租车一次可带四名支持者,携带支持者时总是满员,但在出租车中只有一名支持者独立分开时,情况绝不允许出现,出租车进行多次出行当它第一次到达时,它随机发出信号给两个等待支持者队列中的一个队列,你可以假设每个队列中有一个或多个支持者在发信号时等待,当一个支持者进入出租车时,还有一些房间为更多的支持者在出租车上的支持者(谁刚刚加入出租车)发信号给另一个等待的支持者在队列中,他们也进入出租车。在可能的情况下,支持者将随机选择要发信号的队列,但如果有必要,他们会选择一个特定的队列,以确保没有单个支持者在与相反支持者的出租车中隔离。
最后一名进入出租车的支持者在出租车上完成了一个由四名支持者组成的队伍的信号,告诉出租车司机将他们带到足球场。出租车将他们带到目的地,然后返回重复循环。请注意,只有支持者(不是出租车司机)能够区分谁是曼联的支持者,谁是利物浦的支持者。“
我在申请笔记时遇到了麻烦,网上这种情况下
继承人什么香港专业教育学院迄今所做的:?
int numManInTaxi = 0; //current no. of ManU supporters in taxi
int numLivInTaxi = 0;
sem MaxUnitedFans = 4; // // max no. of supporters that can fit in taxi
sem MaxLivFans = 4;
sem MMutexSem = 1;
sem LMutexSem = 1;
CO
for (count = 1 to ManUSupporter){
ManUProcess[count];
//
for (count = 1 to LivSupporter){
LivProcess[count];
OC
} /*end main process
process ManUProcess [i = 1 to N]{
P(MMutexSem); // mutually exclusice access for United supporter
numManUInTaxi++;
if ((numManInTaxi+numLivInTaxi) < 4)
{
if (numManuInTaxi == 3) { // signal the Man queue
numManUInTaxi++;
} else if ((numManUInTaxi ==1) && (numLivInTaxi==2)){
numManUInTaxi++;
} else if ((numManInTaxi == 2) &&(numLivInTaxi==1)) {
V(MMutexSem);
NumLivInTaxi++;}
//end ManU supporter semaphore
你尝试过什么你会得到更多更好的答案如果你展示你的尝试,并证明你已花时间去尝试帮助自己。请参阅[问] –
我试图构建它,但我几乎肯定它不正确。 在这种情况下,它可以是来自联合起来的一名出租车的人的4个支持,来自每组支持者的2个支持者,或者4个利物浦支持者。 不应该有一个场景,其中一组支持者超过另一组。 – 944jmc
对不起,对此新增功能,现在添加到主要问题 – 944jmc