0

我正在阅读 Milan Milenkovic 的操作系统书籍(http://books.google.co.in/books?id=wbvHuTfiQkoC&printsec=frontcover#v=onepage&q&f=false)。由此我了解了如何使用以下汇编指令实现信号量:

 1)Enable/Disable interrupts
 2)Test & Set instruction
 3)Compare & swap instruction

我想知道除了使用上面的 3 个汇编指令之外,是否还有其他的信号量实现方式。任何帮助将不胜感激。谢谢。

4

1 回答 1

1

您需要使“检查信号量是否已设置;如果未设置,请设置它并告诉我以前的状态”操作原子。如果您想在没有 3 条指令的处理器上实现信号量,您可能可以围绕它构建一些硬件。所以,是的,还有其他方法,取决于你想走多远。如果它不在您的处理器中,请在其他地方构建它。

但是对于一个实际的答案:只有两种方法可以做到这一点。要么使用使多个操作链原子化的东西(这是启用/禁用中断所做的,除了不能禁用 NMI,并且在多核环境中禁用一个内核上的中断对您没有帮助),或者使用处理器以原子方式执行“检查信号量是否已设置;如果未设置,请设置它并告诉我之前的状态”的功能。这样看,您的方法 2) 和 3) 并没有真正的不同。

于 2013-12-30T18:39:56.793 回答