首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 生活 > 自旋锁保持时间非常短(如何理解自旋锁)
自旋锁保持时间非常短(如何理解自旋锁)
更新时间:2024-07-09 03:26:45

作者| 慕课网精英讲师 咚咚呛

最近总有同学问我:

对自旋锁的介绍完全听不懂。我猜,这是一种线程的锁定,直到这个线程不用这个资源了,才会彻底解锁,让出线程。但是希望得到严谨的解答,谢谢。

这个问题要从自旋锁的实现去回答。自旋锁是用于多线程同步的一种锁,线程反复检查锁变量是否可用。由于线程在这一过程中保持执行,因此是一种忙等待,也即是名字中“自旋”本身的含义。

自旋锁在不同语言都有不同的实现,但核心逻辑都是一样的,你可以看做是一个死循环去判断锁变量是否可用,如果可用则跳出循环,否则继续死循环。

逻辑如下:

void spin_lock(lock)

{

while (test_and_set(lock, true));// 锁可用则返回,否则继续循环

}

生产者每次加一前后都会加锁和解锁,那解锁后,锁变量可用,消费者线程就有机会进行减一操作了。那不就是和互斥锁一样了吗?

自旋锁保持时间非常短(如何理解自旋锁)1

是的,就锁的使用上,自旋锁的使用方式和互斥锁的使用并无太大区别,但需要注意的是,自旋锁等待的过程是100%一个核的CPU的,也即是不会让出CPU,这一点和其他锁不同。这一点在课程中,有详细的演示。

既然这种锁会100%占用CPU,那为什么计算机需要有自旋锁这种锁,对计算机的性能有什么好处呢?

这是好问题,为什么计算机内部的实现需要自旋锁,这需要联系前面学习的知识。

通过前面的学习我们知道,进程或者线程在运行的时候,是有上下文的,当不同线程进行切换的时候,为了让线程可以运行起来,需要很多的准备工作,这个准备工作,我们称为“上下文切换”。

在CPU的一个核中,每秒钟可会进行万级~十万级别的上下文切换次数,每次上下文切换都需要一定的成本,因此频繁的上下文切换会对计算机性能造成较大的影响。

锁的好处就是它只是忙等待,线程始终在运行,相比互斥锁的使用,避免了上下文切换。

所以这也限定了互斥锁的使用范围,如果互斥锁等待的时间过长,那么由于它本身对CPU的占用,会导致别的线程无法使用CPU。

因此,互斥锁适用于可预见等待时间很短的多线程同步场景,而对于等待时间不可预测或者等待时间很长的场景,仍然是互斥锁具备更高的效率。

,
相关推荐RECOMMEND
泰坦征服者皮肤怎么获得(泰坦征服者皮肤的获得方法)
泰坦征服者皮肤怎么获得?登录英雄联盟游戏之后,点击商城第二步,然后点击皮肤,接着在搜索框框输入征服者,就会显示征服者皮肤,柘林有三个征服者皮肤接着点击想要获得的皮肤,接着点击购买即可,我来为大家讲解一...
联合国五大常任理事国进场(阿联酋等五国当选联合国安理会非常任理事国)
联合国五大常任理事国进场?中新社联合国6月11日电第75届联合国大会11日举行全体会议,选举阿拉伯联合酋长国、加纳、加蓬、巴西和阿尔巴尼亚为安理会非常任理事国,任期从2022年1月1日起,为期两年,我...
说出了兵妈妈们的心声(这里有您孩子的祝福)
今天,是一年之中格外温馨的节日母亲节。母亲,一个总能让人眼泪打转的词语,一个总能让游子遥望思念的词语,平凡而伟大,简单而厚重。今年的母亲节,你想给妈妈送上哪些祝福呢?如果,你还没有想好给妈妈送的祝福语...
梦见金色的蛇(梦见金色的蛇意思是什么)
梦见金色的蛇?女性梦见金色的蛇主旅行,阻碍多,最好不要去,我来为大家科普一下关于梦见金色的蛇?下面希望有你要的答案,我们一起来看看吧!梦见金色的蛇女性梦见金色的蛇主旅行,阻碍多,最好不要去。待业者梦见...
星座本周运势8.31-9.6 射手(塔罗12星座周运程1118-1123)
请注意:塔罗运势只参考太阳星座事业小红花NO.1射手座:想要的就自己的追,你的果敢给你突破困难的机会。NO.2水瓶座:有些事情是需要靠大家的,要有大爱精神。NO.3金牛座:和值得信赖的伙伴好好商量,未...
团藻是什么(关于团藻介绍)
团藻是什么?团藻目(Volvocales)为藻类植物之一植物目该植物于植物分类表上,归于绿藻门(Chlorophyta)绿藻纲(Chlorophyceae),同纲者尚有四胞藻目(Tetrasporal...