【发布时间】:2019-03-29 01:06:07
【问题描述】:
我知道内核允许进程在持有互斥锁时休眠(尽管这不是一个好习惯)。我的问题是,这是否一定意味着进程将获得pre-empted? LKD 说每次我获得锁时,process->thread_info->preempt_count 都会增加,并且 schedule() 在调用调度程序之前检查preempt_count。
那么睡眠线程会不会被抢占并继续占用系统?
【问题讨论】:
我知道内核允许进程在持有互斥锁时休眠(尽管这不是一个好习惯)。我的问题是,这是否一定意味着进程将获得pre-empted? LKD 说每次我获得锁时,process->thread_info->preempt_count 都会增加,并且 schedule() 在调用调度程序之前检查preempt_count。
那么睡眠线程会不会被抢占并继续占用系统?
【问题讨论】:
是的,mutex 持有者完全可以睡觉。
LKD 说每次我获得锁时,
process->thread_info->preempt_count都会增加...
这是关于自旋锁,而不是互斥锁。 spinlock 持有人实际上是被禁止睡觉的。
【讨论】: