Linux のスケジューラ コードを見ています。
if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
if (unlikely(signal_pending_state(prev->state, prev))) {
prev->state = TASK_RUNNING;
} else {
deactivate_task(rq, prev, DEQUEUE_SLEEP);
prev->on_rq = 0;
私が理解しているように、prev
タスクが中断できない場合、このコードは提供されたタスクを非アクティブ化します(そしてランキューから削除します)
preempt_count() & PREEMPT_ACTIVE == 0
誰かが私に何preempt_count
のためにあるのかthread_info
、いつこの条件が満たされるかどうかを説明できますか?