Linux 系统提供了一种比信号量更好的同步机制,即完成量(completion ,它用于一个执行单元等待另一个
执行单元执行完某事。
Linux 系统中与 completion 相关的操作主要有以下 4 种。
1.定义完成量
下列代码定义名为 my_completion 的完成量。
struct completion my_completion;
2.初始化 completion
下列代码初始化 my_completion 这个完成量。
init_completion(&my_completion);
对 my_completion 的定义和初始化可以通过如下快捷方式实现。
DECLARE_COMPLETION(my_completion);
3.等待完成量
下列函数用于等待一个 completion 被唤醒。
void wait_for_completion(struct completion *c);
4.唤醒完成量
下面两个函数用于唤醒完成量。
void complete(struct completion *c); void complete_all(struct completion *c);
前者只唤醒一个等待的执行单元,后者释放所有等待同一完成量的执行单元。