linux completion的问题

vv1133 2010-10-13 08:30:28
看《linux设备驱动程序》第5章的时候,书上提到用信号量实现同步并不是很好的方法,而要用completion。completion是一种轻量级机制,允许一个线程告诉另一线程某个工作已经完成。

请问completion比信号量好在哪?什么时候该用信号量,什么时候该用completion?

谢谢
...全文
172 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vv1133 2010-10-16
  • 打赏
  • 举报
回复
谢谢各位
maixl 2010-10-14
  • 打赏
  • 举报
回复
completion完成变量一般用在等待线程完成,比如模块创建一个内核线程,在卸载模块时,要等待线程结束了在删除内存,这时候就用wait_for_completion来等待线程完成再往下工作。。。
deep_pro 2010-10-14
  • 打赏
  • 举报
回复
书上写的分明,那是使用信号量来做一种特殊的作用:一个线程等待另一个线程完成
这个可以使用信号量来做,但是不合适,最好使用完成接口去做

信号量最适合做临界区保护,在没有完成接口前的内核版本里,也可用于做完成接口的工作
somehc240 2010-10-14
  • 打赏
  • 举报
回复
如果遇到一个资源是双方或多方都需要的,即临界区,那么选信号量,如果是一个线程依赖另一个线程,用completion, 而且completion基本上都可以用sem实现,可是completion不可以完成sem的所有功能
somehc240 2010-10-14
  • 打赏
  • 举报
回复
信号量是双方的,completion是单方的,互斥信号量是2个线程的共同资源,是双向依赖关系,completion是单向依赖关系。如果把completion换成sem的话,completion的一方的线程会发现该sem 几乎总是可用的,会造成资源的浪费。

4,436

社区成员

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

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