社区
Linux_Kernel
帖子详情
wait_for_completion 和wait_event_interruptible 区别
unbutun
2009-12-09 04:51:05
看了一下wait_for_completion 和wait_event_interruptible
这两个除了建立用不同的函数之外,功能是一样的,都可以等另外一边的动作完成,在执行这边,而且源码里两者
都包含了schedule调度
那么completion 和 waitqueue有什么区别呢,我是指实际上的东西,请不要把书本的拿过来,谢谢了。
...全文
2422
15
打赏
收藏
wait_for_completion 和wait_event_interruptible 区别
看了一下wait_for_completion 和wait_event_interruptible 这两个除了建立用不同的函数之外,功能是一样的,都可以等另外一边的动作完成,在执行这边,而且源码里两者 都包含了schedule调度 那么completion 和 waitqueue有什么区别呢,我是指实际上的东西,请不要把书本的拿过来,谢谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
实际上的东西就去做实验看看了。
Linux_Kernel
4,469
社区成员
17,459
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章