进程调度API之init_waitqueue_head

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值