【问题标题】:ballroom dancers proplem using semaphore使用信号量的舞厅舞者问题
【发布时间】:2014-05-21 12:59:45
【问题描述】:

我正在尝试为“信号量小书”中的“独占队列”问题编写解决方案。问题表述如下:

想象线程代表舞厅舞者,两种舞者,领导者和追随者,在进入舞池之前排成两个队列。当领导者到达时,它会检查是否有跟随者在等待。如果是这样,他们都可以继续进行。否则它会等待。

类似地,当跟随者到达时,它会检查领导者并相应地继续或等待。

我放了如下舞厅课:

public class Ballroom {

public void leaderEntered(){
//the calling leader thread will either block, waiting for
//follower or will proceed to dance
dance();
}

public void followerEntered(){
//the calling followerthread will either block, waiting for
//leader or will proceed to dance
dance();
}

private void dance(){
System.out.println("doing dance");
}

}

这里是leader的代码

mutex.wait()
if followers > 0:
    followers--
    followerQueue.signal()
else:
leaders++
mutex.signal()
leaderQueue.wait()
dance()
rendezvous.wait()
mutex.signal()

这是追随者的代码

mutex.wait()
if leaders> 0:
   leaders--
   leadersQueue.signal()
else:
followers++
mutex.signal()
followersQueue.wait()
dance()
rendezvous.wait()

我该如何继续??

【问题讨论】:

    标签: java semaphore


    【解决方案1】:

    这听起来很像睡觉理发师的问题。试试看这个: Sleeping Barber algorithm (with multiple barbers)

    您可以在此处阅读有关该问题的更多信息: http://en.wikipedia.org/wiki/Sleeping_barber_problem

    【讨论】:

    • 谢谢..但这不相似..因为在睡眠理发师问题中有一个柏柏尔人..在我的问题中有很多领导者。
    • 没问题,但我提供的链接实际上有一个“多个理发师”的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多