mutex锁中会被系统调度么?
本帖最后由 鬼鬼一哈 于 2014-05-01 14:37 编辑mutex_lock
......................//do here, no sleep action
mutex_unlock
请问,如果在锁内执行操作没有显式进程调度,系统有可能会调度它么?
我认为系统可以去调度它,但会不会就不知道了。
spinlock应该是不会的。。。。(如果被中断打断就另说了,记得锁中断就行了) * - mutexes may not be used in hardware or software interrupt
* contexts such as tasklets and timers 回复 1# 鬼鬼一哈
允许呀。你可以看看mutex的代码,取到了锁时,它明确的调了preempt_enable去开抢占。如果当前内核配置为允许内核抢占,那就有可能在持有锁的情况下从内核态被动切换出去了。
从原理上来说也说得通,mutex只保证同样受同一mutex保护的代码不重入,没说跟其它全部代码互斥。
如果想不调度可以在mutex前加preempt_disable()关抢占。
回复 2# 鬼鬼一哈
因mutex是睡眠锁,锁不成功会主动切换出去。而这类环境是不运行调睡眠的函数的。
在中断里互斥,请用spinlock
mutex不保证中断抢占,而中断返回时会重新调度
页:
[1]