爪哇舞厅舞者使用信号灯解决问题
我正试图从《信号灯小册子》中为“排他队列”问题编写一个解决方案。问题陈述如下:
想象一下,线代表舞厅舞者,两种舞者,领导者和追随者,在进入舞池前排队等候。当领导者到达时,它会检查是否有追随者在等待。如果是这样的话,它们可以同时进行。否则它会等待
类似地,当跟随者到达时,它会检查是否有领导者,并相应地继续或等待
我在舞厅上了以下课:
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()
我如何继续
# 1 楼答案
这听起来很像理发师睡觉的问题。试着看看这个: Sleeping Barber algorithm (with multiple barbers)
您可以在此处阅读有关该问题的更多信息: http://en.wikipedia.org/wiki/Sleeping_barber_problem