首页 文章

二进制信号量和互斥量之间有什么区别?

提问于
浏览
1

我想知道二进制信号量和互斥量之间的区别?这些是一样的吗?二进制信号量的值为1和0,锁定和解锁等互斥量 .

我对这些术语感到很困惑 . 我正在谈论应用程序级编程的观点 . 在一次采访中,我被问到这个问题,并向他们解释信号量用于发信号,互斥量用于锁定 . 请用简单的例子来解释 . 我用Google搜索,但后来知道除了上述差异之外,信号量锁可以被其他线程解锁,而互斥锁必须由锁定它的线程解锁 .

1 回答

  • 2

    取决于你如何看待它 .

    concept layer 二进制信号量提供互斥 - 保证只有一个线程将进入临界区 . 即Tanenbaum在他的书"Operating Systems" Ed . 3引入了以下句子的互斥:

    当不需要信号量的计数能力时,有时会使用简化版本的信号量称为互斥量 .

    但是,信号量通常是对具有 P()V() 函数的经典Dijkstra概念的引用,而互斥量是非常宽泛的术语 . 这就是Linus Torvalds在信号量上所说的:

    自旋锁是一种互斥机制,而不是信号量(信号量是一种非常特殊的互斥) .

    (来自comp.os.linux.development.system:Re: NT kernel guy playing with Linux

    implementation layer 上,互斥锁可以实现为信号量,即在Linux 2.4中:http://lxr.free-electrons.com/source/include/asm-i386/semaphore.h?v=2.4.37#L89

    通常,互斥体具有更复杂的实现和更广泛的概念:

    • Mutex有 owner field - 当前进入互斥锁的线程 . 它提供了各种好处,如可重复进入的互斥,优先级倒置等 .

    • 虽然信号量通常是无法获取它的块线程,但是互斥量可能是自适应的(如在Solaris中)可以旋转(忙等待直到互斥锁被解锁) .

    • 信号量通常通过递增/递减计数器实现,但互斥体可以使用原子交换和测试操作 .

    其中一些想法来自维基百科:w:Semaphore (programming)

相关问题