信号量基本操作

时间:2015-08-06 00:49:40

标签: multithreading semaphore binary-semaphore

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

我正在读考试,这是给出的样本问题:

以前的考试中提出的问题:

  

学生决定见面并去看电影。学生决定见面并去看电影。决定见面并去看电影。   他们聚集在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
    }
   }

如果有人帮我解决这个问题,我会非常感激。

1 个答案:

答案 0 :(得分:0)

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

  • 你需要保留一个等待学生的队列,每当一名职员决定接受一名学生时,就必须将其锁定,并在职员完成向学生出售门票时获释。

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

  • 考虑一下你可以达到死锁的情况(职员永远不会释放锁定/减少信号量等)