-
定义并初始化等待队列头 wait_queue_head
-
定义并初始化 wait_queue_entry
autoremove_wake_function() 就是实际执行唤醒本线程的回调函数,其支持的唤醒mode是通过参数传入的,也就是说由显示调用的唤醒函数决定的。如下:
-
准备休眠
-
将当前任务切走,让出CPU,进入等待状态
-
等待的事件发生后被唤醒
(1) 支持的唤醒函数
(2) 示例
展开为:
示例中的线程唤醒回调函数是 autoremove_wake_function()。
-
结束等待
-
binder驱动中的一个删减后的例子
-
必须要根据wait时指定的休眠类型,来选择唤醒的类型。
-
wake_up_xxx() 函数只是提供了一个唤醒框架,最终还是要调用到wait entry的回调函数执行实际的唤醒,回调函数中调用的 try_to_wake_up() 应该是最终归一的唤醒函数。
-
wake_up_xxx() 函数只是提供了一个唤醒框架中,采用书签这个虚拟的wait entry机制,来限制每次最大唤醒任务数量为64个,以免持有 rq->lock 过长时间。
Original: https://www.cnblogs.com/hellokitty2/p/16514441.html
Author: Hello-World3
Title: Linux内核机制—wait唤醒机制
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/27510/
转载文章受原作者版权保护。转载请注明原作者出处!