鬼鬼一哈 发表于 2014-05-01 14:35

mutex锁中会被系统调度么?

本帖最后由 鬼鬼一哈 于 2014-05-01 14:37 编辑

mutex_lock
......................//do here, no sleep action
mutex_unlock
请问,如果在锁内执行操作没有显式进程调度,系统有可能会调度它么?
我认为系统可以去调度它,但会不会就不知道了。

spinlock应该是不会的。。。。(如果被中断打断就另说了,记得锁中断就行了)

鬼鬼一哈 发表于 2014-05-01 18:26

* - mutexes may not be used in hardware or software interrupt
*   contexts such as tasklets and timers

Tinnal 发表于 2014-05-04 09:36

回复 1# 鬼鬼一哈
允许呀。你可以看看mutex的代码,取到了锁时,它明确的调了preempt_enable去开抢占。如果当前内核配置为允许内核抢占,那就有可能在持有锁的情况下从内核态被动切换出去了。

从原理上来说也说得通,mutex只保证同样受同一mutex保护的代码不重入,没说跟其它全部代码互斥。
如果想不调度可以在mutex前加preempt_disable()关抢占。

   

Tinnal 发表于 2014-05-04 09:38

回复 2# 鬼鬼一哈
因mutex是睡眠锁,锁不成功会主动切换出去。而这类环境是不运行调睡眠的函数的。

在中断里互斥,请用spinlock


   

fangyb7799 发表于 2014-05-06 17:54

mutex不保证中断抢占,而中断返回时会重新调度
页: [1]
查看完整版本: mutex锁中会被系统调度么?