进程调度API之init_waitqueue_head

来源:互联网 发布:上海市软件著作权资助 编辑:程序博客网 时间:2024/05/16 14:56
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_headvoid __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct lock_class_key *key){// 初始化spin lockspin_lock_init(&q->lock);//用于debug 死锁的情况lockdep_set_class_and_name(&q->lock, key, name);// 初始化指针INIT_LIST_HEAD(&q->task_list);}双向链表的基本初始化static inline voidINIT_LIST_HEAD(struct list_head *list){    list->next = list->prev = list;}

原创粉丝点击