【发布时间】:2015-10-08 04:57:23
【问题描述】:
假设有一个游戏,三个玩家移动,每个玩家都被赋予一个颜色 (R,G,B)。如果必须制作三个例程(每个玩家移动一个),有没有办法确保玩家仅使用信号量按 R 然后 G 然后 B 的顺序移动? (假设 R 将始终启动)。
这个问题不应该考虑可能在特定编程语言中找到的任何特殊类型的信号量,而应该只是一个教科书信号量。
我提出的解决方案是(在伪代码中):
Red {
wait(R)
wait(B)
wait(G)
Move Red
signal(G)
signal(B)
signal(R)
}
Blue {
wait(R)
wait(B)
wait(G)
Move Blue
signal(G)
signal(B)
signal(R)
}
Green {
wait(R)
wait(B)
wait(G)
Move Green
signal(G)
signal(B)
signal(R)
}
但我认为这行不通,因为虽然 Red 可以保证先行,但我们不知道 Blue 会在 Green 获得 B 信号量之前获得它;甚至是 Blue 会在 Green 得到 R 信号量之前得到它。
还有其他方法可以做到这一点吗?我错过了什么吗?
【问题讨论】:
标签: semaphore pseudocode