信号量基本操作



首先,如果这不是我提问的正确地方,请原谅。

我正在准备考试,这是题目的样题:

以前考试中的问题:

学生们决定见面去看电影。学生们决定见面并一起看电影。决定见面,一起看电影。在他们以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

  • 考虑一下你可能会遇到死锁的场景(职员永远不会释放锁/减少信号量等)

最新更新