使用信号量的舞厅舞者问题

时间:2014-05-21 12:59:45

标签: java semaphore

我正在尝试为“排除队列”编写解决方案。来自信号量小书的问题'。问题陈述如下:

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

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

我举办了以下舞厅课程:

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");
}

}

这是学习者的代码

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()

我怎么继续?

1 个答案:

答案 0 :(得分:0)

这听起来与睡觉的理发师问题非常相似。试着看看这个: Sleeping Barber algorithm (with multiple barbers)

您可以在此处详细了解此问题: http://en.wikipedia.org/wiki/Sleeping_barber_problem