当前位置:网站首页>挂起等待锁 vs 自旋锁(两者的使用场合)
挂起等待锁 vs 自旋锁(两者的使用场合)
2022-07-05 05:21:00 【abs(ln(1+NaN))】
1、自旋锁的定义
挂起等待锁:当某个线程没有申请到锁的时候,此时该线程会被挂起,即加入到等待队列等待。当锁被释放的时候,就会被唤醒,重新竞争锁
自旋锁:当某个线程没有申请到锁的时候,该线程不会被挂起,而是每隔一段时间检测锁是否被释放。如果锁被释放了,那就竞争锁;如果没有释放,过一会儿再来检测。
2、自旋锁相关函数
Linux提供了一种数据类型来表示自旋锁 —— pthread_spinlock_t
(1) 加锁/解锁函数
(2) 初始化/销毁函数
3、挂起等待锁、自旋锁的使用场景
既然如此,那什么时候应该用自旋锁,什么时候使用挂起等待锁呢?
例子1:你约好你朋友一起去打球,你朋友说要一个小时准备好,于是乎,你就去附近的网吧玩了一个小时打发时间。
例子2:同样是你约朋友去打球,你朋友说5分钟准备好,于是你就在楼下等,每隔1分钟给你朋友发送消息询问情况。
例子1 ——》 挂起等待锁,当临界区运行的时间较长时,我们一般使用挂起等待锁。我们先让线程PCB加入到等待队列中等待,等锁被释放时,再重新申请锁。
例子2 ——》自旋锁,如果这里使用挂起等待锁,可能线程刚加入等待队列,锁就被释放了,将线程唤醒是需要成本的。因此,当临界区运行的时间较短时,我们一般使用自旋锁。
边栏推荐
猜你喜欢
[to be continued] [depth first search] 547 Number of provinces
Do a small pressure test with JMeter tool
Web APIs DOM node
Research on the value of background repeat of background tiling
National teacher qualification examination in the first half of 2022
lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 6 and head, line 8, column 8
Web APIs DOM节点
Pointnet++的改进
远程升级怕截胡?详解FOTA安全升级
TF-A中的工具介绍
随机推荐
Haut OJ 1243: simple mathematical problems
To be continued] [UE4 notes] L4 object editing
质量体系建设之路的分分合合
64 horses, 8 tracks, how many times does it take to find the fastest 4 horses at least
Add level control and logger level control of Solon logging plug-in
Collapse of adjacent vertical outer margins
room数据库的使用
[转]MySQL操作实战(三):表联结
[interval problem] 435 Non overlapping interval
A complete attack chain
Service fusing hystrix
Pause and resume of cocos2dx Lua scenario
Kali 2018 full image download
[to be continued] [depth first search] 547 Number of provinces
[轉]: OSGI規範 深入淺出
小程序直播+電商,想做新零售電商就用它吧!
2022上半年全国教师资格证下
Pointnet++的改进
Three dimensional dice realize 3D cool rotation effect (with complete source code) (with animation code)
Research on the value of background repeat of background tiling