当前位置:首页 > 公众号精选 > Linux阅码场
[导读]为什么要加锁在SMP系统中,如果仅仅是需要串行地增加一个变量的值,那么使用原子操作的函数(API)就可以了。但现实中更多的场景并不会那么简单,比如需要将一个结构体A中的数据提取出来,然后格式化、解析,再添加到另一个结构体B中,这整个的过程都要求是「原子的」,也就是完成之前,不允许...

为什么要加锁

在SMP系统中,如果仅仅是需要串行地增加一个变量的值,那么使用原子操作的函数(API)就可以了。但现实中更多的场景并不会那么简单,比如需要将一个结构体A中的数据提取出来,然后格式化、解析,再添加到另一个结构体B中,这整个的过程都要求是「原子的」,也就是完成之前,不允许其他的代码来读/写这两个结构体中的任何一个。

这时,相对轻量级的原子操作API就无法满足这种应用场景的需求了,我们需要一种更强的同步/互斥机制,那就是软件层面的「锁」的机制。

同步锁的「加锁」和「解锁」是放在一段代码的一前一后,成对出现的,这段代码被称为Critical Section/Region(临界区)。但锁保护的并不是这段代码本身,而是其中使用到的多核/多线程共享的变量,它「同步」(或者说串行化)的是对这个变量的访问,通俗的语义就是“我有你就不能有,你有我就不会有”。

Linux中主要有两种同步锁,一种是spinlock,一种是mutex。spinlock和mutex都既可以在用户进程中使用,也可以在内核中使用,它们的主要区别是前者不会导致睡眠和调度,属于busy wait形式的锁,而后者可能导致睡眠和调度,属于sleep wait形式的锁。

spinlock是最基础的一种锁,像后面将要介绍的rwlock(读写锁),seqlock(读写锁)等都是基于spinlock衍生出来的。就算是mutex,它的实现与spinlock也是密不可分。因此,本系列文章将首先围绕spinlock展开介绍。

如何加锁

Linux中spinlock机制发展到现在,其实现方式的大致有3种。

【第一种实现 - 经典的CAS】

最古老的一种做法是:spinlock用一个整形变量表示,其初始值为1,表示available的状态。当一个CPU(设为CPU A)获得spinlock后,会将该变量的值设为0,之后其他CPU试图获取这个spinlock时,会一直等待,直到CPU A释放spinlock,并将该变量的值设为1。

那么其他的CPU是以何种形式等待的,如果有多个CPU一起等待,形成了竞争又该如何处理?这里要用到经典的CAS操作(Compare And Swap)。

  • 谁和谁比较

目前,sh架构的Linux实现中还保留有这种经典的实现方法(相关代码位于/arch/sh/include/asm/spinlock-cas.h)。

static inline void arch_spin_lock(arch_spinlock_t *lock)
{
while (!__sl_cas(
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

广告科技领导者Kira LeBlanc晋升为全球首席营销官  蒙特利尔和多伦多2022年4月1日 /美通社/ -- 全球最大的独立程序化数字户外(DOOH)广告技术公司之一Hivestack今天宣布...

关键字: ck

(全球TMT2022年4月1日讯)独立程序化数字户外(DOOH)广告技术公司Hivestack宣布任命Kira LeBlanc为全球首席营销官。LeBlanc于2021年初Hivestack宣布其全球扩张计划时加入该公...

关键字: ck

(全球TMT2022年3月28日讯)Super Micro Computer, Inc. (SMCI) 宣布将支持NVIDIA最新的软件和硬件版本。Supermicro的NVIDIA认证服务器和工作站经过验证...

关键字: ni ic Enterprise

面向供电行业的革命性交钥匙解决方案,可提高系统可靠性和电网弹性 伊利诺伊州博林布鲁克2022年3...

关键字: 输电线路 ic

2021年全年多项业绩指标再创新高; “企业数字化运营解决方案”全年收入持续三位数同比增长; “SaaS+X”商业模式为“企业数字化运营解决方案”的迅猛增长...

关键字: ic ck

(全球TMT2022年3月24日讯)Shutterstock, Inc.是一个全球领先的创意平台,为众多品牌、企业和媒体公司提供全方位服务解决方案、高质量内容及创意工作流程解决方案。该公司宣布在其已有十年传统的年度奥斯...

关键字: ck

在其推出年度“奥斯卡流行艺术!”活动系列10周年之际,Shutterstock内部创意团队立足其平台逾4亿创意资产,创作原创波普艺术风格作品...

关键字: ck

(全球TMT2022年3月23日讯)Super Micro Computer, Inc. (SMCI) 宣布推出拥有突破性性能的Supermicro高端服务器,将搭载采用AMD 3D V-Cache技术的第三代AMD...

关键字: AMD 处理器 ic

简化客户部署,为人工智能、机器学习和高性能计算提供极致的模块化和定制选项 美国加州圣何塞2022...

关键字: CPU GPU ic

(全球TMT2022年3月23日讯)Super Micro Computer, Inc. (SMCI) 为宣布推出一项革命性技术,可简化大规模GPU部署,设计符合未来需求,甚至支持尚未公开的技术。此通用GPU...

关键字: CPU GPU ic

Linux阅码场

174 篇文章

关注

发布文章

编辑精选

技术子站

关闭