【问题标题】:Semaphore Basic Operations信号量基本操作
【发布时间】:2015-10-28 23:19:52
【问题描述】:

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

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

以前考试中给出的问题:

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

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

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

【问题讨论】:

  • 为什么学生总是一起去!!..
  • 1.他们必须等待组合 2. 他们必须等待得到职员的帮助

标签: multithreading semaphore binary-semaphore


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多