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,并初始化等待队列
实现流程: