挂起等待锁 vs 自旋锁(两者的使用场合)

1、自旋锁的定义

挂起等待锁:当某个线程没有申请到锁的时候,此时该线程会被挂起,即加入到等待队列等待。当锁被释放的时候,就会被唤醒,重新竞争锁。

自旋锁:当某个线程没有申请到锁的时候,该线程不会被挂起,而是每隔一段时间检测锁是否被释放。如果锁被释放了,那就竞争锁;如果没有释放,过一会儿再来检测。

 

2、自旋锁相关函数

Linux提供了一种数据类型来表示自旋锁 —— pthread_spinlock_t

(1) 加锁/解锁函数

(2) 初始化/销毁函数

 3、挂起等待锁、自旋锁的使用场景

既然如此,那什么时候应该用自旋锁,什么时候使用挂起等待锁呢?

例子1:你约好你朋友一起去打球,你朋友说要一个小时准备好,于是乎,你就去附近的网吧玩了一个小时打发时间。                

例子2:同样是你约朋友去打球,你朋友说5分钟准备好,于是你就在楼下等,每隔1分钟给你朋友发送消息询问情况。              

例子1 ——》 挂起等待锁,当临界区运行的时间较长时,我们一般使用挂起等待锁。我们先让线程PCB加入到等待队列中等待,等锁被释放时,再重新申请锁。

例子2 ——》自旋锁,如果这里使用挂起等待锁,可能线程刚加入等待队列,锁就被释放了,将线程唤醒是需要成本的。因此,当临界区运行的时间较短时,我们一般使用自旋锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值