[知识小黑板] spin_lock / spin_lock_bh /spin_lock_irq /spin_lock_irqsave 区别总结
spin_lock的实现从以下两个角度去达成数据的安全性:
1. cpu不会被调度出去。也就是当前的thread可以一直占着cpu。这需要关闭cpu调度
2. 当前thread不会被中断打断。这里要关闭中断。中断又分为软中断和硬中断
也因为spin_lock关闭了cpu调度和中断。在使用spin_lock 的时候它所保护的范围里是不能有sechdule 功能存在的。
包括sleep function, 和一些__might_sleep function.比如mutex_lock.
我们一般比较常用的几个spin_lock function.差别如下表。
|
是否关闭cpu抢占/高度 |
是否关闭软中断 | 是否关闭硬中断 | 是否还原-原中断状态 | |
| spin_lock | yes | NO | NO | NO |
| spin_lock_bh | yes | yes | NO | NO |
| spin_lock_irq | yes | yes | yes | NO |
| spin_lock_irqsave | yes | yes | yes | yes |

浙公网安备 33010602011771号