Linux内核~~~什么是自旋锁

自旋锁是Linux内核中用于多线程同步的关键机制,确保同一时间只有一个线程能访问临界区。当锁被占用时,请求线程会循环等待,直到锁释放。由于自旋锁可能导致CPU资源浪费,因此适用于短期持有。理想的持有时间应小于两次上下文切换的时间。自旋锁提供了一种轻量级的锁机制,防止并发访问,适合多处理器环境。

Linux内核最常见的锁是自旋锁(spin lock)。自旋锁最多只能被一个可执行线程持有。

如果一个线程试图获得一个被已经持有的自旋锁,那么该线程就会一直进行忙 循环---旋转---等待锁重新可用。

要是锁未被争用,请求锁的执行线程便能立即得到他,继续执行。

在任意时间,自旋锁都可以防止多于一个的执行线程同时进入临界区。

 

自旋锁相当于在坐在门外等里面的伙伴出来,并把钥匙交给你。

如果你到了门口,发现里面没有人,可以直接抓了钥匙进房间。如果你到了门口,发现里面有人,就必须在门外等待钥匙,并不断的检查房间里面是否还有人。

当房间为空的时候,你就可以抓钥匙进入。正式因为有了钥匙(相当于自旋锁),才允许一次只有一个人(相当于执行线程)进入房间(相当于临界区)。

 

一个被争用的自旋锁使得请求它的线程在等待锁重新可用时自旋(特别浪费处理器时间)。所以自旋锁不应该被长时间持有。

事实上,这点正是使用自旋锁的初衷,在短期间进行轻量级加锁。

持有自旋锁的时间最好小于完成两次上下文切换的耗时。

 

因为自旋锁在同一时刻至多被一个线程持有,所以一个时刻只能有一个线程位于临界区内,这就为多处理器机器提供了防止并发访问所需的保护机制。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我曾阿牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值