CMU:信号量

时间:2010-09-06 06:28:41

标签: semaphore spinlock

请检查我对信号量的理解!

我理解计算信号量和二进制信号量背后的想法。然而,用signal()和wait()实现的自旋锁和信号量之间的区别在于我。

例如,自旋锁基本上有两个值(锁定或解锁的二进制真/假)。因此,自旋锁基本上是二进制信号量,对吗?

当其他进程在内部时,任何尝试进入临界区的进程都将无法锁定,并且会旋转并不断检查锁状态,直到它被解锁,然后才能进入并锁定它。

使用signal()和wait()函数的信号量实质上是从某种变量中添加或减去一个值。关键部分存在约束。它只会在变量具有某种值时打开。消费者进程的示例实现将是等待(完整),然后当它已满并执行时,最后它将发出信号(空)。生产者进程可以等待(空)并在空为真时执行,然后在完成时发出信号(满)。

wait()和一个在循环中基本上“等待”的自旋锁有什么区别?

1 个答案:

答案 0 :(得分:0)

  

与信号量不同,自旋锁可以用在无法休眠的代码中,例如中断处理程序。

http://www.makelinux.net/ldd3/chp-5-sect-5.shtml

http://www.linuxjournal.com/article/5833