struct?completion?my_completion;??//?定義完成量
init_completion(&my_completion);??//?初始化完成量
reinit_completion(&my_completion)??//?重新初始化完成量
void?wait_for_completion(struct?completion?*c);?//?等待完成量
void?complete(struct?completion?*c);?//?只喚醒一個等待的執行單元
void?complete_all(struct?completion?*c);//?釋放所有等待同一完成量的執行單元。
其主要用于通知某個等待線程繼續執行

struct?completion?{
?unsigned?int?done;
?wait_queue_head_t?wait;
};
struct?wait_queue_head?{
?spinlock_t??lock;
?struct?list_head?head;
};
typedef?struct?wait_queue_head?wait_queue_head_t;
結構體名稱:completion
文件位置:include/linux/completion.h
主要作用:用于定義一個完成量
unsigned int done:表示一個完成狀態,跟蹤或者表示某個操作已經完成wait_queue_head_t wait:定義一個用于管理進程或者線程的等待隊列spinlock_t lock:定義一個自旋鎖struct list_head head:定義一個鏈表,用來管理等待隊列?
#define?init_completion(x)?__init_completion(x)
/**
?*?init_completion?-?Initialize?a?dynamically?allocated?completion
?*?@x:??pointer?to?completion?structure?that?is?to?be?initialized
?*
?*?This?inline?function?will?initialize?a?dynamically?created?completion
?*?structure.
?*/
static?inline?void?__init_completion(struct?completion?*x)
{
?x->done?=?0;
?init_waitqueue_head(&x->wait);
}
#define?init_waitqueue_head(wq_head)??????\
?do?{?????????\
??static?struct?lock_class_key?__key;????\
??????????\
??__init_waitqueue_head((wq_head),?#wq_head,?&__key);??\
?}?while?(0)
void?__init_waitqueue_head(struct?wait_queue_head?*wq_head,?const?char?*name,?struct?lock_class_key?*key)
{
?spin_lock_init(&wq_head->lock);
?lockdep_set_class_and_name(&wq_head->lock,?key,?name);
?INIT_LIST_HEAD(&wq_head->head);
}
INIT_LIST_HEAD(struct?list_head?*list)
{
????list->next?=?list->prev?=?list;
}
函數名稱:init_completion
文件位置:include/linux/completion.h
主要作用:初始化完成量,將其完成狀態賦值為0,并初始化等待隊列
實現流程: