代码github地址:https://github.com/happyAnger6/linux-kernel-study
Linux2.4.7版本内核加入了"completion(完成)"接口。completion是一种轻量级的机制,它允许一个线程告诉另一线程某个工作已经完成。为了使用completion,必须包含<linux/completion.h>。
可以利用下面的接口创建
DECLARE_COMPLETION(my_completion);
或者,如果必须动态地创建和初始化completion,则使用下面的方法:
struct completion my_completion;
init_completion(&my_completion);
要等待completion,可进行如下调用:
void wait_for_completion(struct completion *c);
注意,该函数执行一个非中断的等待。如果代码调用了这个接口且没有人会完成该任务,则将产生一个不可杀的进程。
另一方面,实际的completion事件可通过调用下面函数之一来触发:
<