ssss 1 2 3 3 4 45

[知识小黑板] 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

 

posted @ 2020-05-22 14:33  会游泳的骆驼  阅读(1192)  评论(0)    收藏  举报
百度 123

没有一个人在这个世上独活。