0

首先,如果这不是我的问题的正确位置,请原谅我。

我正在准备考试,这是给出的示例问题:

上一次考试给出的问题:

学生们决定见面并去看电影。学生们决定见面并去看电影。决定见面去看电影。他们以group_size为一组聚集在一起后,他们去买票。每个学生学生学生购买自己的票(成为客户)。有两个售票亭(每个售票亭有一名职员)。如果店员有空,它将在线为下一位顾客服务(一次一位顾客)。两个展位只有一条线。

使用信号量和对信号量的操作,同步两种线程类型:Student 和 Clerk。有 numStudents(默认 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
    }
   }

如果有人能帮我解决这个问题,我将不胜感激。

4

1 回答 1

0

由于提供实际代码并不能真正为您服务,这里有一些提示:

  • 您需要维护等待学生的队列,每次职员决定接受学生时都必须将其锁定,并在职员完成向学生售票时释放。

  • 您需要使用 wait() 将文员和学生置于“睡眠模式”,而您的信号量 = 0

  • 想想你可能会遇到死锁的场景(职员从不释放锁/递减信号量等)

于 2015-08-06T01:04:29.513 回答