首先,如果这不是我的问题的正确位置,请原谅。
我正在读考试,这是给出的样本问题:
以前的考试中提出的问题:
学生决定见面并去看电影。学生决定见面并去看电影。决定见面并去看电影。 他们聚集在group_size小组后,他们去买票。每个学生学生都会购买自己的门票(成为顾客)。有两个售票亭(每个展位有一个职员)。如果职员可以使用,它将在线服务下一位客户(一位客户在a 时间)。两个展位只有一条线。
在信号量上使用信号量和操作,同步两种线程类型:Student 和秘书。有numStundents(默认为9)和numClerks(默认为2)。考虑那里 清晨没有客户在展台上排队。从职员的角度来看(确实如此) 由你决定)你可以认为这两个职员已经在工作或他们都没有 到了(当第一位顾客出现时)。客户数量多于numStudents。 给出每个使用的信号量的类型,初始值,并简要解释它的用法。 如果可以用信号量替换它们的使用,请不要使用布尔变量。 大致在同步之前,线程的可能执行伪代码可能是:
Student ( ) { arrive to meeting place // napping group together go buy ticket buy ticket //napping watch movie // napping } Clerk ( ) { get to workplace // napping while(true) { serve customer // if ∃ a customer } }
如果有人帮我解决这个问题,我会非常感激。
答案 0 :(得分:0)
由于提供实际代码并不能真正为您服务,这里有一些提示:
你需要保留一个等待学生的队列,每当一名职员决定接受一名学生时,就必须将其锁定,并在职员完成向学生出售门票时获释。
您需要使用wait()将职员和学生置于"睡眠模式",而您的信号量为= 0
考虑一下你可以达到死锁的情况(职员永远不会释放锁定/减少信号量等)