自旋锁的底层实现
简介自旋锁
"锁"的作用就是保护临界区资源,避免不同的CPU同时访问相同的变量(或中断与进程同时访问相同变量)。非原子变量的赋值,大多数都不是一个指令周期能完成的,试想如果CPU1将某变量刚更改了一半,CPU2正好就来读取了这个半成品变量,并基于此去做计算,可能会造成严重后果。
解决办法就是CPU1在改写这个变量前,先"加锁";CPU2访问这个变量前也先加锁,但由于已经被加锁了,所以获取锁失败,CPU2原地等待锁释放;CPU1改写完变量后,"解锁";CPU2获取到锁后加锁,然后访问变量,完成后解锁。
上面的"锁"可以是信号量、互斥锁、自旋锁等。本文的自旋锁(spinlock)与其它锁的最大不同,就是在等待锁释放的时候不会睡眠,而是在空转(自旋)。信号量和互斥锁在等待锁释放的时候,会进入睡眠。
不睡眠的好处是:可以在中断上下文运行;另外,对于很快就能获取到锁的场景,这种方式效率更高。
不睡眠的坏处是:如果等待锁释放的时间较长,则极其浪费CPU资源。 自旋锁在X86的代码实现/******include/asm-i386/spinlock_types.h***/ typedef struct { unsigned int slock; } raw_spinlock_t; #define __RAW_SPIN_LOCK_UNLOCKED { 1 } /******include/asm-i386/spinlock.h***/ static inline void __raw_spin_lock(raw_spinlock_t *lock){ asm volatile( // lock->slock减1 1:LOCK_PREFIX decb %0 //如果不为负.跳转到3f.3f后面没有任何指令,即为退出 jns 3f //重复执行nop.nop是x86的小延迟函数 2:rep nop cmpb $0,%0 //如果lock->slock不大于0,跳转到标号2,即继续重复执行nop jle 2 //如果lock->slock大于0,跳转到标号1,重新判断锁的slock成员 jmp 1 3:: "+m" (lock->slock) : : "memory"); }
在多处理器环境中 LOCK_PREFIX 实际被定义为 "lock"前缀。x86 处理器使用"lock"前缀的方式提供了在指令执行期间对总线加锁的手段。芯片上有一条引线 LOCK,如果在一条汇编指令(ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG)前加上"lock" 前缀,经过汇编后的机器代码就使得处理器执行该指令时把引线 LOCK 的电位拉低,从而把总线锁住,这样其它处理器或使用DMA的外设暂时无法通过同一总线访问内存。
jns 汇编指令检查 EFLAGS 寄存器的 SF(符号)位,如果为 0,说明 slock 原来的值为 1,则线程获得锁,然后跳到标签 3 的位置结束本次函数调用。如果 SF 位为 1,说明 slock 原来的值为 0 或负数,锁已被占用。那么线程转到标签 2 处不断测试 slock 与 0 的大小关系,假如 slock 小于或等于 0,跳转到标签 2 的位置继续忙等待;假如 slock 大于 0,说明锁已被释放,则跳转到标签 1 的位置重新申请锁。
狙击手1950年为了保家卫国,反抗敌人的侵略,国家毅然决然做出了抗美援朝的重要历史决策。中国英雄高举社会主义旗帜,与朝鲜人民共同战斗,浴血奋战这中间,我们牺牲了数不清的中国英雄,这才赢下
流媒体相互竞争的黄金年代已经逝去过去的半个年代,可谓是我们享受娱乐节目的黄金时期。因为流媒体盛行,包括奈飞迪斯尼HBO等大公司之间的相互竞争,给我们带来了无数的电影和电视剧。一夜之间,似乎观看影视成了我们的日常行
行程卡纪念版是否合规?是否存在安全隐患?专家回应2022年12月13日0时,通信行程卡正式下线。一些有仪式感的网友赶在零点前截了个图,留作纪念。与此同时,一项名为行程卡纪念版的新型服务也随即在朋友圈流行。其依托微信小程序和微信公
OPPO发布两款折叠屏手机售价5999元起!头条创作挑战赛OPPO召开2022未来科技大会,在大会第二天,OPPO发布了旗下最新折叠屏OPPOFindN2系列,共包括两款产品,分别为OPPOFindN2和OPPOFindN2
随身超便携的多用途小伙伴!雷神2Mini拐角灯体验有这么一种灯,它脱胎于二战军用。既可别在上衣口袋或胸包,甚至帽檐上,亦可吸附于铁质物体表面。更可与绑带相连当作头灯。它的用途广泛,解放双手去做其它事。想必桐油们已经猜到了它的身份,
利用NAS把闲置的带宽利用起来挣电费本内容来源于什么值得买APP,观点仅代表作者本人作者我是个人才引言作为一个垃圾佬,不能容忍NAS大部分时间是闲置的,于是就想着如何利用NAS闲置的资源来挣会待机的电费。现在各种视频
李小冉,凹凸有致惹人羡基本在娱乐圈混的人就没有几个不是绯闻缠身的,但是也有一个女明星是比较低调的,她就是李小冉。李小冉的身材真的是内地第一,肤白貌美,凹凸有致。李小冉就是一个非常独特的存在,李小冉不仅长
10家通勤男装品牌店铺分享2022生机大会百搭不贵秋冬必备!今天分享10家通勤男装品牌店铺,在国内外的款式和性价比都不错的品牌,非常适合男生日常通勤上班搭配,简约时尚又有轻熟感,干货满满记得收藏起来,想穿随
羽绒服才不丑!这10套look承包整个冬天的美丽和温暖羽绒服才不丑!这10套look承包整个冬天的美丽和温暖哈喽呀离过年越来越近,大家是不是都在各种买新衣服,但又觉得很难挑到合心意的衣服呢?尤其是冬天的外套,觉得羽绒服暖但又觉得显土,
带火机场穿搭的杨幂,又发功了,下面的日常私服也很赞提起杨幂肯定很多人不陌生,有人因为脍炙人口的电视剧作品关注的她,有人因为出其不意的梗关注的她,也有人是因为她的颜值和身材关注的她。但其实也有不少粉丝,是因为她的穿衣风格喜欢上的她,
冬天穿羽绒服,不要非黑即灰,这些颜色时髦不浮夸,比黑灰色好看在冬天,羽绒服是最必不可少的一款服饰,羽绒服的保暖性能非常强,但是也非常容易穿出臃肿感,因为,羽绒服内里的填充物是轻飘飘的羽绒,这种物料膨胀感非常强,比较容易显胖。正是因为这种蓬松