首页 >企业动态 > > 正文

【趣话计算机底层技术】一个故事看懂各种锁|天天信息

来源:博客园 2023-05-17 09:22:35

我是一个线程,一个卖票程序的线程。


(资料图片仅供参考)

自从我们线程诞生以来,同一个进程地址空间里允许有多个执行流一起执行,效率提升的同时,也引来了很多麻烦。

我们卖票线程的工作很简单,比如票的总数是100,每卖一张就减1,直到变成0售完为止。

以前单线程的时候没啥问题,但多个线程一起执行的时候就发现,有些家伙读取到票数是100,减1后变成99,还没等他把票数写回去,另外有别的线程去读也是100,也做了同样的事,结果卖了两张票,票数才减了1张,一天下来,多卖了很多票,气的人类差点想砸了我们。

原子操作

我们把这问题反馈给了操作系统大哥,他给我们的解决方案是:读取票数->票数减1->写回票数这三个步骤不能被拆分,中途不能被打断,他说这个叫原子操作

他给了我们一套原子操作的手册,里面不止有减法,还有加法、位运算,只要调用手册里的原子操作函数,就能保证逻辑的正确性。

我很好奇操作系统大哥是如何实现这个过程的原子化的,他告诉我,如果CPU只有一个核很好办,执行原子操作的时候,他不切换线程就可以。而如果是有多个核,就需要CPU来帮忙了。

你还别说,我们用这个原子操作来卖票后,再也没有发生超额卖票的问题。

自旋锁

有一天,我们卖票程序进行了升级,不再是直接读取票数->票数减1->写回票数这么简单,还需要安排座位,现在变成了:

我们一翻手册,没有哪个原子操作函数能满足我们的功能,毕竟安排座位这个操作是咱们卖票程序自己的事儿,一点也不通用,操作系统大哥肯定不会专门为我们开发一个原子操作函数。

我们只好再一次求助操作系统大哥,他一看就说:“你们这个问题,用自旋锁就可以解决”

锁?我们还是第一次听说这玩意,不知道是什么意思。

操作系统告诉我们,让我们回去创建一个锁,这锁里面有一个状态标记来表示当前有没有被占用,所有线程在执行卖票操作之前,都得先去获取这个锁,如果锁被占用了,线程就会阻塞在获取函数那里,获取函数内部会不断循环去检查,直到别的线程释放后才返回。

因为获取锁的时候线程会一直循环检查状态,所以这锁也叫自旋锁。

现在,我们的工作流程变成了:

我们又可以愉快地卖票了!

互斥锁

我们的业务发展很快,后来,我们用上了数据库,把票的数量写到了数据库里面,于是我们的工作流程变成了:

本以为只是把票数从本地内存搬到了数据库,应该没什么不一样,结果发现我们运行经常出错,还莫名其妙地被杀掉进程。

我们向操作系统大哥大倒苦水,没想到他却说:“你们还好意思诉苦,你们获取自旋锁后搞那么耗时的操作,让别的线程一直自旋等待,把CPU都跑得飞起,风扇都转个不停···”

我们都羞愧地低下了头,原来,把票数从本地内存搬到了数据库,差别这么大。

操作系统又接着说道:“自旋锁因为会使得线程一直阻塞自旋,没有让出CPU,所以只适合处理比较快速的场合,像读取数据库这种很耗时的操作,不能用它,会白白浪费CPU时间!”

我们又询问:“有没有别的不浪费CPU的办法呢?”

操作系统大哥又给我们介绍了一个叫互斥锁的东西,听说获取这个锁的时候,线程不会去自旋检查,而是把自己放到这把锁的等待队列中,然后就交出CPU执行权限,进入睡眠,看起来就跟阻塞一样,等到后面别的线程释放锁之后,再去唤醒它的等待队列里的线程继续运行。

回去以后我们就用上了互斥锁,现在我们的流程变成了这样:

我们又又能愉快地卖票了!

条件变量

有一天,我们的卖票程序又进行了升级,21-100号票价格比较便宜,交给其他线程来卖,1-20号票价格比较贵,交给我来卖。

现在,我们不同的线程卖的票不一样了。

别的线程的流程是这样:

而我的流程是这样:

使用互斥锁倒也没什么问题,可就是我经常拿到锁以后发现票号还大于20,不该我处理,只好默默的释放锁,白白把我唤醒,却什么也没干!

空手而回的次数多了以后,我又去请教操作系统大哥,能不能让我指定一个条件,等条件满足了再唤醒我运行,别让我白跑。

没想到还真有办法!操作系统告诉了我一个叫条件变量的东西,等待条件变量的线程平时阻塞着,别的线程发现条件满足之后,就将条件变量激活,那个时候等待的线程才会被唤醒。

回去之后,我跟我的小伙伴儿们商量了一下,我们创建了一个条件变量,等到它们发现票号小于等于20的时候,就把条件变量激活,我就会被唤醒,再也不用白跑了!

信号量

互斥锁和条件变量真是好东西,帮了我们大忙,不仅帮我们解决了卖票的问题,我们还在其他很多地方使用它,我们遇到的绝大多数同步和互斥问题都可以用它们来解决。

直到有一天,我们遇到了一个新的问题。

我们的票越卖越好,从100到1000,票的数量越来越多,来找我们买票的客户也越来越多。

因为每次售票都要访问数据库,连接它的线程有些多,那家伙有些吃不消了。

希望我们控制一下访问数据库的线程数量。

我们很自然的想到了互斥锁,只有拿到锁的线程才能去访问数据库。

可这互斥锁名叫互斥,只能允许一个线程拿到锁,总不能只允许一个线程访问数据库吧,那可不行。所以我们希望这个名额能放宽,允许多个线程同时获得锁。

我们再一次找到了操作系统大哥,大哥拿出了他的绝招——信号量

他告诉我们,这信号量就像一个升级版的互斥锁,它里面有一个计数器,可以用来指定最多允许多少个线程同时获得它。

这正是我们想要的锁!

很快我们用上了信号量,我们又又又能愉快地卖票了!

Tips:在信号量一节中,实际上数据库能承受的并发量远不止这点,这里为了故事情节需要,弱化了数据库的并发承受能力。

往期推荐

这玩意儿能逆向分析代码,我直接麻了!

完了!CPU一味求快出事儿了!

核弹级漏洞!我把log4j扒给你看

可怕!CPU暗藏了这些未公开的指令!

我是Redis,MySQL大哥被我害惨了!

上一篇:前沿热点:巴菲特一季度持仓报告发布,为市场带来哪些启示? 下一篇:最后一页
x
推荐阅读

【趣话计算机底层技术】一个故事看懂各种锁|天天信息

2023-05-17

前沿热点:巴菲特一季度持仓报告发布,为市场带来哪些启示?

2023-05-17

中船科技:5月16日融券净卖出4.47万股,连续3日累计净卖出29.7万股_世界通讯

2023-05-17

“股神”式非法荐股亟待遏制|焦点热讯

2023-05-17

快播:响应跨境证券业务整改要求 富途控股、老虎证券将在境内应用市场下架旗下APP

2023-05-17

医用酒精浓度_医用酒精的消毒原理-环球快播

2023-05-17

冰冻牛肉怎么腌制又滑又嫩方法?_全球速递

2023-05-17

天天百事通!暴风影音怎么播放dvd_暴风影音怎么播放DVD

2023-05-17

苹果地图及苹果音乐App推出音乐演出探索功能 今日热门

2023-05-16

联合国首次纪念巴勒斯坦“灾难日”

2023-05-16

渣土车超载163%,同一工地6车超载 .....成都交警公布一批工程运输车辆超载典型案例

2023-05-16

合肥市轨道交通6号线一期工程龙塘停车场项目顺利通过基坑验槽验收-世界今热点

2023-05-16

湖北省科技馆预约门票流程 当前独家

2023-05-16

空间智能化的速度,连ChatGPT都低估了

2023-05-16

*ST宋都:由于宋都控股未提前还贷 公司新增3.22亿元资金被占用

2023-05-16

新邵 :小河飘香制茶忙

2023-05-16

交了社保没有社保卡怎么领取 多种领取方式如下 天天快讯

2023-05-16

风云三号G星首套图发布!用卫星拍降水,三维结构长啥样?|世界热闻

2023-05-16

通讯!践行社会责任 椿萱茂破解失智照护难题

2023-05-16

每日看点!工匠汇·第三届四川工匠|王明胜

2023-05-16

关于“二阳” 钟南山最新研判!哪些人的风险高?需要医疗干预吗?

2023-05-16

世界今亮点!福龙马:5月15日召开业绩说明会,投资者参与

2023-05-16

ST凯撒:随着旅游市场逐渐恢复,现金流开始出现缓解

2023-05-16

iPhone 15/15 Plus影像也有新升级:搭载4800万三层堆叠传感器主摄

2023-05-16

天天视点!电脑屏幕突然花屏怎么解决_电脑屏幕突然花屏

2023-05-16

组图丨株洲市国动系统开展“5·12”防灾减灾主题宣传周活动 关注

2023-05-16

2023珠海东澳岛船票多少钱(普通舱+头等舱+贵宾舱)

2023-05-16

币圈“老马”一场链游一场梦_世界热推荐

2023-05-16

《热血习武》5月16日首发福利汇总

2023-05-16

沈晓明在益阳调研:奋力书写新时代高标准的“山乡巨变” 全球微资讯

2023-05-16

理论+实操!彭州中学生命安全教育干货满满 天天新消息

2023-05-16

今头条!2023年“百城万企”促就业海南行动将于20日举行

2023-05-16

教学计划的教学内容_教学计划的内容包括 通讯

2023-05-16

穆勒:我在场上当“小广播”或会惹人烦,但理论上会让所有人受益

2023-05-16

快资讯丨Mawson Infra Gr(MIGI.US):2023年Q1财报实现营收767.061万美元

2023-05-16

焦点短讯!美媒列出76人第7场不敌凯尔特人的三大原因,主教练和双核背锅

2023-05-16

pvc给水管规格尺寸价格表(pvc给水管规格尺寸)

2023-05-16

每日短讯:贵阳2023年中考(对象+时间+科目+方式)

2023-05-15

俄海参崴港成中国出海口?官方回应是什么情况

2023-05-15

fate玉藻前九尾形态有多强(九尾狐玉藻前是男是女) 全球播资讯

2023-05-15

孩子王两股东拟合计减持不超3%股份

2023-05-15

曝光!这些账号,是仿冒的!超107000个……

2023-05-15

每日快看:肝癌腹水能大小便怎么治疗

2023-05-15

每日消息!Mysteel晚餐:央行定调最新货币政策,铁矿石到港量明显增加

2023-05-15

团体人身意外伤害保险是什么?保障范围包括哪些?-当前信息

2023-05-15

世界实时:阿根廷驻华大使赴水满乡品五指山茶

2023-05-15

天天热点!“冬闲田”变“增收田” 江西南昌86万余亩油菜喜获丰收

2023-05-15

长安逸达销量持续攀升

2023-05-15

南昌市与国际篮联签订战略合作协议 万广明出席签约仪式并见证签约|看热讯

2023-05-15

玉林市场:三七货源走动缓慢 行情没有起色 今日聚焦

2023-05-15

深港两地市民互通交流频繁 跨境消费人气旺

2023-05-15

环球视讯!乳腺增生要注意什么生活细节_乳腺增生的注意事项

2023-05-15

吃苹果会对身体有什么益处?吃苹果时不宜同食什么?

2023-05-15

Epic表示虚幻引擎5.2已消除PSO引起的卡顿问题 环球观速讯

2023-05-15

当日快讯:饮品巨头保乐力加停止向俄罗斯所有出口

2023-05-15

今日要闻!青少年如何纾解情绪、化解心结?“12355”来了!

2023-05-15

今天可能突破35℃!请做好防护——

2023-05-15

大报大新闻丨山东:以高质量调查研究推动高质量发展 天天新动态

2023-05-15

每日热议!“AI歌手”走红网络 谁侵了谁的权?专家解读

2023-05-15

had怎么读_had

2023-05-15

高考状元中考分数线 初中升高中的录取分数线为多少?

2023-05-15

家庭细菌清洗方法(家庭清洁消毒的方法) 全球观天下

2023-05-15

现在二年级的古诗有哪些 人教版小学二年级语文书上的所有古诗是|环球热推荐

2023-05-15

generous什么意思_generous 世界头条

2023-05-15

微速讯:雷阵雨!大风!刚刚,河北发布黄色预警→

2023-05-14

如何在网易我的世界加mod_网易我的世界mod怎么加入

2023-05-14

凭10+4复式票,泰安彩民团队斩获2984万大奖,中奖彩票曝光!

2023-05-14

跟着音乐去旅行!“I LOVE海口城市音乐会”5月16日开幕|环球观天下

2023-05-14

全球今日报丨如何用玉米粒制作玉米粉

2023-05-14

千古江湖梦怎么养马 环球热头条

2023-05-14

环球今亮点!意媒:本轮意甲穆帅将派遣多位小将,迪巴拉等人不出战为欧联留力

2023-05-14

今日报丨俄称乌以英导弹袭击民用设施 乌暂无回应

2023-05-14

马力刺客|仰望U9+兰博基尼Revuelto+路特斯ELETRE 上海车展10000匹大挑战

2023-05-14

户加偏旁组成新字(户加偏旁组成新字并组词)

2023-05-14

世界播报:成功人生格言经典语录精选文案73句集锦(成功人生格言经典短句)

2023-05-14

张家口下花园区检察院积极拓展专项监督活动线索-天天热资讯

2023-05-14

项目征收补偿协议正式生效 当前时讯

2023-05-14

强“蹭”名人造谣传谣?对借壳碰瓷的恶流量该管管了

2023-05-14

环球新资讯:前4月海南推广应用新能源汽车2.91万辆

2023-05-14

今日热议:手机storage文件夹在哪里 storage文件夹在哪里

2023-05-14

信用卡滞纳金什么时候取消

2023-05-14

白月初头像(白月初)

2023-05-14

盘点传统戏剧中的母亲形象,你知道多少?_天天新资讯

2023-05-14

焦点短讯!王上面一个点读什么_上面一个王下一个八

2023-05-13

山东杂粮煎饼面糊制作_山东杂粮煎饼面糊制作配方 消息

2023-05-13

车尔尼299相当于几级_车尔尼299

2023-05-13

浮梦若生 第四章 活尸

2023-05-13

学长每天都很欠揍-热门看点

2023-05-13

白沙印发创建国家乡村振兴示范县方案

2023-05-13

杨修啖酪文言文翻译及注释拼音_杨修啖酪文言文翻译

2023-05-13

艾灸足三里的好处和坏处_艾灸足三里的好处|天天看热讯

2023-05-13

2023年金枪鱼上市公司有哪些?金枪鱼上市公司一览 当前独家

2023-05-13

科沃斯T20 PRO比上代强|最新快讯

2023-05-13

当前快播:扬州第二届“大运河青年文创节”开幕

2023-05-13

对话最前沿丨面朝大海 行“舟”天河

2023-05-13

减少对美元依赖!又一国家行动-世界头条

2023-05-13

【世界速看料】唐鸿伟:5.12黄金连续做空如期下跌,精彩不断,晚间行情操作建议

2023-05-13

宏观社会学 第4版 世界新要闻

2023-05-13

【环球快播报】抢沙发是什么意思网络用语_抢沙发是什么意思

2023-05-13

雷神ZERO 2023深度评测:13代酷睿+RTX40

2023-05-13