gpt4 book ai didi

multithreading - 线程唤醒后,用TASK_RUNNING调用set_current_state的必要性是什么?

转载 作者:行者123 更新时间:2023-12-03 13:17:29 25 4
gpt4 key购买 nike

据我了解,在Linux内核线程进入可中断 sleep 之后,它可能被两件事唤醒:

通过唤醒家族函数调用

  • 发出信号。

  • 我已经在内核中看到了以下模式。我想知道在第8行调用 set_current_state(TASK_RUNNING)的必要性吗?现在不是已经处于 TASK_RUNNING状态了吗?
    1  set_current_state(TASK_INTERRUPTIBLE);
    2 spin_lock(&list_lock);
    3 if(list_empty(&list_head)) {
    4 spin_unlock(&list_lock);
    5 schedule();
    6 spin_lock(&list_lock);
    7 }
    8 set_current_state(TASK_RUNNING);
    9
    10 /* Rest of the code ... */
    11 spin_unlock(&list_lock);

    最佳答案

    如果list_empty(&list_head)为false,则不会调用schedule()并进入休眠状态。在那种情况下,它需要将自己的状态重新设置为TASK_RUNNING,以防止意外的 sleep 。

    关于multithreading - 线程唤醒后,用TASK_RUNNING调用set_current_state的必要性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726715/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com