加载中...

自旋锁是一种忙等待(busy-waiting)的互斥原语:线程获取锁失败时不进入睡眠,而是在循环中反复尝试,直到锁被释放。
自旋锁适合临界区极短、锁很快会被释放的场合,省去了睡眠与唤醒的上下文切换开销;也适用于不允许睡眠的上下文,如中断处理程序。Linux 内核中 spinlock 是最基础的锁,单核抢占内核上退化为关抢占。
为解决公平性与缓存争用,发展出 ticket lock(按票号排队)、MCS 锁与 qspinlock(每 CPU 在本地变量上自旋,减少缓存行弹跳),Linux 当前采用 qspinlock。读写自旋锁与 seqlock 则针对读多写少场景优化。
优点是无睡眠开销、延迟低;缺点是等待期间空耗 CPU,临界区一长或持锁者被抢占就会浪费大量周期,用户态使用尤需谨慎。

登录 后参与讨论
暂无讨论,来发表第一条评论吧