我想知道二进制信号量和互斥量之间的区别吗? 这些是一样的吗?二进制信号量的值为1和0,其中互斥锁如锁定和解锁。
我对这些条款感到很困惑。我正在谈论应用程序级编程的观点。在一次采访中,我被问到这个问题,并向他们解释信号量用于发信号,互斥量用于锁定。请用简单的例子来解释。我用Google搜索,但后来知道除了上述差异之外,信号量锁可以被其他线程解锁,而互斥锁必须由锁定它的线程解锁。
答案 0 :(得分:2)
取决于您如何看待它。
在概念层 二进制信号量提供互斥 - 保证只有一个线程会进入关键部分。即Tanenbaum在他的书"操作系统"埃德。 3引入了带有以下句子的互斥体:
当不需要信号量的计数能力时,有时会使用称为互斥的信号量的简化版本。
但是,信号量通常是对具有P()
和V()
函数的经典Dijkstra概念的引用,而互斥是非常宽泛的术语。这就是Linus Torvalds对信号量的看法:
自旋锁是互斥机制,而不是信号量(信号量 是一种非常具体的互相排斥的种。
(来自comp.os.linux.development.system:Re: NT kernel guy playing with Linux)
在实施层 互斥上可以实现为信号量,即在Linux 2.4中:http://lxr.free-electrons.com/source/include/asm-i386/semaphore.h?v=2.4.37#L89
通常 mutex 具有更复杂的实现和更广泛的概念:
owner
字段 - 当前进入互斥锁的线程。它提供各种好处,如可重复进入的互斥,优先级倒置等。其中一些想法来自维基百科:w:Semaphore (programming)