何时使用MCS锁定

时间:2014-06-28 08:11:09

标签: operating-system synchronization locking mutex spinlock

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

1) Ideally should be used when there more than 2 threads we want to synchronise 
2) MCS locks reduces the number of cache lines that has to be invalidated. In the worst case, cache lines of 2 CPUs is invalidated.

还有什么我想念的吗?

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

我认为@ CodeMoneky1的其他答案并不能真正解释“ MCS还能用来实现互斥锁而不是自旋锁吗?”

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

相关问题