wait_for_completion 和wait_event_interruptible 区别

unbutun 2009-12-09 04:51:05
看了一下wait_for_completion 和wait_event_interruptible

这两个除了建立用不同的函数之外,功能是一样的,都可以等另外一边的动作完成,在执行这边,而且源码里两者
都包含了schedule调度


那么completion 和 waitqueue有什么区别呢,我是指实际上的东西,请不要把书本的拿过来,谢谢了。
...全文
2230 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
duhuidavid 2010-08-27
  • 打赏
  • 举报
回复 1
wait_event实际上是一套函数,应对各种情况,如wake_up_interruptible,wake_up_nr, prepare_to_wait_exclusive, wake_up_interruptible_nr, wake_up_all 等。

而wait_for_completion 是wait_event函数组中的一种特殊情况。它表示不可中断,一次可以唤醒一个或全部,但不能指定唤醒个数。wake_up_nr 就可以指定唤醒个数。wait_for_completion底层实现和wake_up_nr一样,都是从队列尾部插入,以实现单个唤醒。而wait_evevnt 是从队列前面插入,所以只能唤醒全部,而不能单个唤醒。

总之,wait_for_completion是wait—event函数组中的一种特例。
unbutun 2010-03-07
  • 打赏
  • 举报
回复
能给个多个线程的c code例子吗?

这样说只是理论呀。


呵呵
充电宝111 2010-01-09
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090621/21/741c4c5d-a1ce-4e31-936f-f8af39665390.html
unbutun 2010-01-09
  • 打赏
  • 举报
回复
能给个简单例子吗?
unbutun 2010-01-09
  • 打赏
  • 举报
回复
能给个多个线程的c code例子吗?

这样说只是理论呀。


呵呵
unbutun 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 rshu 的回复:]
wait_for_completion,可以多次锁定,并且等到每个调用者都complete后才会返回;
wait_event_interruptible,只要wake_up_process就返回;
[/Quote]

能给个简单例子吗?
rshu 2009-12-26
  • 打赏
  • 举报
回复
wait_for_completion,可以多次锁定,并且等到每个调用者都complete后才会返回;
wait_event_interruptible,只要wake_up_process就返回;
unbutun 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 unbutun 的回复:]
引用 7 楼 rshu 的回复:
wait_for_completion,可以多次锁定,并且等到每个调用者都complete后才会返回;
wait_event_interruptible,只要wake_up_process就返回;


能给个简单例子吗?
[/Quote]


能给个简单例子吗?


windriver3 2009-12-26
  • 打赏
  • 举报
回复
一对多,一对一
cuijie_cn 2009-12-14
  • 打赏
  • 举报
回复
不知道,顺便学习一下
unbutun 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 unbutun 的回复:]
引用 3 楼 deep_pro 的回复:
wait_for_completion 把当前进程置为 TASK_UNINTERRUPTIBLE
wait_event_interruptible 把当前进程置为TASK_INTERRUPTIBLE

当然这个也很表面




不错,wait_for_completion和wait_event有什么区别呢?completion这个东西和event这组有什么区别呢?我看了下,底层都差不多呀。
[/Quote]

up
unbutun 2009-12-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 deep_pro 的回复:]
wait_for_completion 把当前进程置为 TASK_UNINTERRUPTIBLE
wait_event_interruptible 把当前进程置为TASK_INTERRUPTIBLE

当然这个也很表面


[/Quote]

不错,wait_for_completion和wait_event有什么区别呢?completion这个东西和event这组有什么区别呢?我看了下,底层都差不多呀。
deep_pro 2009-12-09
  • 打赏
  • 举报
回复
wait_for_completion 把当前进程置为 TASK_UNINTERRUPTIBLE
wait_event_interruptible 把当前进程置为TASK_INTERRUPTIBLE

当然这个也很表面

Wenxy1 2009-12-09
  • 打赏
  • 举报
回复
如果你使用 wait_event, 你的进程被置为不可中断地睡眠, 如同我们之前已经提到的, 它常常不是你所要的. 首选的选择是 wait_event_interruptible, 它可能被信号中断. 这个版本返回一个你应当检查的整数值; 一个非零值意味着你的睡眠被某些信号打断, 并且你的驱动可能应当返回 -ERESTARTSYS. 最后的版本(wait_event_timeout 和 wait_event_interruptible_timeout)等待一段有限的时间; 在这个时间期间(以嘀哒数表达的, 我们将在第 7 章讨论)超时后, 这个宏返回一个 0 值而不管条件是如何求值的.

参考:《linux 设备区动程序》第三版的第 6 章
rzsheng 2009-12-09
  • 打赏
  • 举报
回复
实际上的东西就去做实验看看了。

4,436

社区成员

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

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