当前位置: 技术问答>linux和unix
linux 内核中prepare_to_wait用法
来源: 互联网 发布时间:2017-05-01
本文导语: 在看到有代码中在同一个函数中先调用prepare_to_wait,然后调用schedul()调度出去,这个线程就开始睡眠了。然后在后面的接口又调用finsh_wait()。这个线程都在睡眠,怎么能调到finish_wait()然后结束睡眠呢?还有一...
在看到有代码中在同一个函数中先调用prepare_to_wait,然后调用schedul()调度出去,这个线程就开始睡眠了。然后在后面的接口又调用finsh_wait()。这个线程都在睡眠,怎么能调到finish_wait()然后结束睡眠呢?还有一个prepare_to_wait没有等到条件,睡眠到什么时候为止呢???对于prepare_to_wait的用法颇为不解!!!!
|
是有其他的线程来wake_up。
|
调用prepare_to_wait就是吧自己加入到一个队列,我们叫他 队列A吧,并更改程序状态。这个时候呢,还工作着呢。
然后调用schedule,就开始睡眠了。
然后呢,会有一个和队列A相关的线程会来唤醒队列A中的线程,就是那个睡眠的。
醒来,就把自己重队列A里面移出来,finish_wait(),重新恢复状态为TASK_RUNNING
然后调用schedule,就开始睡眠了。
然后呢,会有一个和队列A相关的线程会来唤醒队列A中的线程,就是那个睡眠的。
醒来,就把自己重队列A里面移出来,finish_wait(),重新恢复状态为TASK_RUNNING