void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct lock_class_key *)
是等待队列的基础适用函数之一,之前的博文已经给出过等待队列的用法了
这个函数的作用是初始化等待队列的头指针,使参数q的task_list字段的next和prev都指向头指针自身
其源码分析如下:
#define init_waitqueue_head(q) \
do { \
static struct lock_class_key __key; \
\
__init_waitqueue_head((q), #q, &__key); \
} while (0)
这里定义一个__key变量后,将__key的指针传递给__init_waitqueue_head,这里的#q是将q变成字符串
继续看__init_waitqueue_head
void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct lock_class_key *key)
{
// 初始化spin lock
spin_lock_init(&q->lock);
//用于debug 死锁的情况
lockdep_set_class_and_name(&q->lock, key, name);
// 初始化指针
INIT_LIST_HEAD(&q->task_list);
}
双向链表的基本初始化
static inline void
INIT_LIST_HEAD(struct list_head *list)
{
list->next = list->prev = list;
}
进程调度API之init_waitqueue_head
最新推荐文章于 2022-10-19 21:14:13 发布