当前位置: 技术问答>linux和unix
linux completion的问题
来源: 互联网 发布时间:2016-10-07
本文导语: 看《linux设备驱动程序》第5章的时候,书上提到用信号量实现同步并不是很好的方法,而要用completion。completion是一种轻量级机制,允许一个线程告诉另一线程某个工作已经完成。 请问completion比信号量好在哪?什么...
看《linux设备驱动程序》第5章的时候,书上提到用信号量实现同步并不是很好的方法,而要用completion。completion是一种轻量级机制,允许一个线程告诉另一线程某个工作已经完成。
请问completion比信号量好在哪?什么时候该用信号量,什么时候该用completion?
谢谢
请问completion比信号量好在哪?什么时候该用信号量,什么时候该用completion?
谢谢
|
信号量是双方的,completion是单方的,互斥信号量是2个线程的共同资源,是双向依赖关系,completion是单向依赖关系。如果把completion换成sem的话,completion的一方的线程会发现该sem 几乎总是可用的,会造成资源的浪费。
|
如果遇到一个资源是双方或多方都需要的,即临界区,那么选信号量,如果是一个线程依赖另一个线程,用completion, 而且completion基本上都可以用sem实现,可是completion不可以完成sem的所有功能
|
书上写的分明,那是使用信号量来做一种特殊的作用:一个线程等待另一个线程完成
这个可以使用信号量来做,但是不合适,最好使用完成接口去做
信号量最适合做临界区保护,在没有完成接口前的内核版本里,也可用于做完成接口的工作
这个可以使用信号量来做,但是不合适,最好使用完成接口去做
信号量最适合做临界区保护,在没有完成接口前的内核版本里,也可用于做完成接口的工作
|
completion完成变量一般用在等待线程完成,比如模块创建一个内核线程,在卸载模块时,要等待线程结束了在删除内存,这时候就用wait_for_completion来等待线程完成再往下工作。。。