内核线程与Completion
文章目录
- 内核线程与Completion
- 1、Completion介绍
- 2、Completion相关API
- 2.1 Completion初始化
- 2.2 等待任务完成
- 2.3 唤醒任务
- 2.4 状态检测
- 3、驱动代码实现
- 4、驱动验证
如果有一个或多个线程必须等待某些内核活动达到某个点或特定状态,Linux内核的Completion机制可以为该问题提供无竞争的解决方案。 从语义上讲,它们有点像 pthread_barrier() 并且具有相似的用例。
本文将详细介绍在Linux内核中如何使用Completion。
1、Completion介绍
Completion是一种代码同步机制,比任何滥用锁/信号量和忙循环更可取。 每当考虑使用 yield() 或一些古怪的 msleep(1) 循环来允许其他事情继续进行时,您可能想考虑使用 wait_for_completion*() 调用之一并改用 complete()。
使用Completion的好处是它们有一个定义明确、重点突出的目的,这使得代码的意图很容易看出,但它们也会产生更高效的代码,因为所有线程都可以继续执行,直到实际需要结果为止,并且比使用低级调度程序睡眠/唤醒设施,等待和信号都非常有效。
Completion构建在 Linux 调度程序的等待队列和唤醒基础结构之上。 等待队列上的线程正在等待的事件被简化为Struct Completion中的一个简单标志,恰当地称为Completion。
使用Completion的步骤如下:
- 1&