知识卡片

自旋锁与互斥锁的调度差异

专业/工作 · 1107.a

内容

自旋锁和互斥锁解决的是同一个问题——同一时刻只允许一个执行单元持有锁,区别在拿不到锁时的行为:互斥锁让申请者睡眠,等锁释放后被唤醒;自旋锁原地空转反复检查锁是否释放,绝不睡眠。这个差异决定了各自适用边界:自旋锁因不睡眠能在中断上下文使用,也省掉睡眠/唤醒的调度开销,代价是锁被持有期间自己会一直空耗CPU,所以只适合持锁时间很短的临界区;一旦临界区可能耗时较长,自旋锁反而比睡眠等待更浪费资源。

参考来源

《深入浅出DPDK》第4章《同步互斥机制》