2.6以后的内核支持内核抢占,被抢占的前提是:preempt_count为0,而很多spin_lock的实现中包含preempt_disable() 使程序调用spin_lock后 preempt_count为1.
那么:
可否认为spin_lock()之后sipn_unlock()之前的程序不管多长是原子形式进行的(执行时进程不会被换出)?
如果可以认为问题1的操作是以原子形式进行的, 那么系统如何处理spin_lock之后的阻塞或是睡眠?
linux spin_lock的一些疑惑
答案:2 悬赏:0 手机版
解决时间 2021-02-10 01:52
- 提问者网友:原来太熟悉了会陌生
- 2021-02-09 04:41
最佳答案
- 五星知识达人网友:蕴藏春秋
- 2021-02-09 04:49
原子形式进行和进程不会被换出没有关系。
只可以保证spin_lock()之后sipn_unlock()之前的程序在执行的过程中不会有其他进程进入。
所以也就不存在“系统如何处理spin_lock之后的阻塞或是睡眠”的问题了
只可以保证spin_lock()之后sipn_unlock()之前的程序在执行的过程中不会有其他进程进入。
所以也就不存在“系统如何处理spin_lock之后的阻塞或是睡眠”的问题了
全部回答
- 1楼网友:孤老序
- 2021-02-09 05:28
spin lock一般翻译为自旋锁,简单的理解是这样的,它和信号量差不多。 信号量:线程在无信号时会阻塞,阻塞时会释放cpu,让其它线程用。 自旋锁:自旋锁在得不到锁的状态下也会阻塞,但阻塞时不释放cpu,一直占用cpu,相当于在死循环。 如果想看比较专业的解释,可以参考: <a href="http://wenwen.soso.com/z/urlalertpage.e?sp=shttp%3a%2f%2fbaike.baidu.com%2fview%2f1250961.html%3fwtp%3dtt" target="_blank">http://baike.baidu.com/view/1250961.html?wtp=tt</a>
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯