【问题标题】:When to use MCS lock何时使用 MCS 锁
【发布时间】:2014-08-19 08:07:53
【问题描述】:

我一直在阅读 MCS 锁,我觉得这很酷。现在我知道它是如何实现的,下一个问题是何时使用它。以下是我的想法。请随时将项目添加到列表中

1) 理想情况下应该在我们要同步的线程超过 2 个时使用 2) MCS 锁减少了必须失效的缓存行的数量。在最坏的情况下,2 个 CPU 的高速缓存行无效。

我还有什么遗漏的吗?

MCS 也可以用来实现互斥锁而不是自旋锁吗?

【问题讨论】:

    标签: operating-system synchronization locking mutex spinlock


    【解决方案1】:

    当存在高锁争用时,代码将受益于使用 MCS 锁,即,许多线程同时尝试获取锁。当使用简单的自旋锁时,所有线程都轮询一个共享变量,而 MCS 形成一个等待线程队列,这样每个线程都轮询队列中的它的前任。因此缓存一致性要轻得多,因为等待是“本地”执行的。

    使用 MCS 来实现互斥体实际上并没有什么意义。 在互斥体中,等待线程通常由操作系统排队并取消调度,因此没有任何轮询。例如查看pthread's mutex implementation

    【讨论】:

      【解决方案2】:

      我认为@CodeMoneky1 的另一个答案并没有真正解释“MCS 也可以用来实现互斥锁而不是自旋锁吗?”

      互斥锁是使用自旋锁 + 计数器 + 等待队列实现的。这里的自旋锁通常是 Test&Set 原语,或者使用 Peterson 的解决方案。我实际上同意 MCS 可以作为替代方案。不使用它的原因可能是增益有限。毕竟互斥锁中使用的自旋锁的范围要小得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        相关资源
        最近更新 更多