首先,如果这不是我提问的正确地方,请原谅。
我正在准备考试,这是题目的样题:
以前考试中的问题:
学生们决定见面去看电影。学生们决定见面并一起看电影。决定见面,一起看电影。在他们以group_size为单位聚集在一起后,他们去买票。每个学生都买自己的票(成为顾客)。有两个售票亭(每个售票亭有一个售票员)。如果店员有空,它将为在线的下一个顾客服务(每次一个顾客)时间)。两个摊位只能排一条线。
使用信号量和对信号量的操作,同步两种线程类型和职员。有numstudents(默认为9)和numclerk(默认为2)一大早没有顾客在展台前排队。从办事员的角度来看是这样的由你决定)你可以认为两个职员都已经上班了,或者他们都没有上班还没到(当第一个顾客出现的时候)。顾客比学生多。给出所使用的每个信号量的类型、初始值,并简要说明其用法。不要使用布尔变量,如果他们的使用可以被信号量代替。大约在同步之前,线程的执行伪代码可能是:
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 } }
如果有人能帮我解决这个问题,我将非常感激。
由于提供实际代码并不能真正为您服务,这里有一些提示:
-
你需要维护一个等待学生的队列,每次当售票员决定接受一个学生时,这个队列必须被锁定,当售票员卖完票给学生时,这个队列将被释放。
-
你需要使用wait()将职员和学生置于"睡眠模式",而你的信号量为= 0
-
考虑一下你可能会遇到死锁的场景(职员永远不会释放锁/减少信号量等)