水货笨叔介绍MCS锁

这篇博客介绍了Linux内核中spinlock的三种实现,重点讨论了MCS(Multi-Consumer Single-Producer)锁,以解决经典spinlock的不公平性和cache颠簸问题。MCS锁通过队列方式提高了锁的公平性,相较于经典spinlock和Ticket spinlock,其代码更复杂,但更适应多核环境。
摘要由CSDN通过智能技术生成

前几天小明同学和笨叔抱怨:现在的spinlock锁的代码变得越来越复杂了,我都看不懂了。的确spinlock的代码从原来简单的几行代码,变成现在复杂的几百行,除了代码变得复杂,里面隐含的原理也不简单。

在linux内核的spinlock的实现历史中,一共有三个版本的spinlock实现。

第一个是经典的spinlock实现。

第二个是Ticket spinlock的实现。

第三个是基于MCS算法的queued spinlock的实现。

第一个最简单,在ARM64上实现就是几行汇编代码就搞定了。

第二种实现也不难,几十行汇编也搞定了。

第三种实现,反而从汇编代码变成了C代码,代码量也变多了。

前面两种锁机制,究竟遇到了些啥问题。经典spinlock会导致不公平的问题,经典的spinlock就是一群CPU去抢一个锁,那有可能出现,最早来抢的人 反而没有抢到,而刚刚释放锁的CPU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值