linux 内核中prepare_to_wait用法

进行中 2013-11-13 02:06:24
在看到有代码中在同一个函数中先调用prepare_to_wait,然后调用schedul()调度出去,这个线程就开始睡眠了。然后在后面的接口又调用finsh_wait()。这个线程都在睡眠,怎么能调到finish_wait()然后结束睡眠呢?还有一个prepare_to_wait没有等到条件,睡眠到什么时候为止呢???对于prepare_to_wait的用法颇为不解!!!!
...全文
641 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
进行中 2013-11-13
  • 打赏
  • 举报
回复
嗯,之前我看代码好像没看到有人给wake_up,所以非常纳闷!!那既然有人wake_Up了就会设置进程状态并且把它从等待队列删除,这个finish_wait是不是有点多余??? 是不是wait_event 差不多?
Carl_CCC 2013-11-13
  • 打赏
  • 举报
回复
是有其他的线程来wake_up。
进行中 2013-11-13
  • 打赏
  • 举报
回复
哦。那在使用prepare_to_wait的是时候应该还有一个类似于wake_up()在其他地方被调用来唤醒该队列里面的线程?是不是状态设为TASK_RUNNING了就可以被调度?
Carl_CCC 2013-11-13
  • 打赏
  • 举报
回复
调用prepare_to_wait就是吧自己加入到一个队列,我们叫他 队列A吧,并更改程序状态。这个时候呢,还工作着呢。
然后调用schedule,就开始睡眠了。
然后呢,会有一个和队列A相关的线程会来唤醒队列A中的线程,就是那个睡眠的。
醒来,就把自己重队列A里面移出来,finish_wait(),重新恢复状态为TASK_RUNNING

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧