linux等待队列

等待队列在Linux内核中用于管理睡眠进程,当特定条件满足时由内核唤醒。它基于双向链表,每个等待队列头带有自旋锁保护。等待队列可通过DEFINE_WAIT或DECLARE_WAIT_QUEUE_HEAD定义,使用add_wait_queue()或add_wait_queue_exclusive()将进程加入队列,并通过sleep_on系列函数或wait_event进行等待操作。
摘要由CSDN通过智能技术生成

等待队列(wait_queue)表示一组睡眠的进程, 当某种条件为真的时候, 由内核来唤醒它们.

等待队列由双向链表来实现, 每一个等待队列都有一个等待队列头(wait_queue_head).

struct __wait_queue_head {
	spinlock_t lock;
	struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;

由于等待队列经常由中断处理和其他的内核函数来修改所以要对其数据进行保护所以此处使用了spin_lock.

wait_queue_t:

struct __wait_queue {
	unsigned int flags;
#define WQ_FLAG_EXCLUSIVE	0x01
	void *private;
	wait_queue_func_t func;
	struct list_head task_list;
};

通过DEFINE_WAIT或者DECLARE_WAIT_QUEUE_HEAD来定义一个等待队列

#define DEFINE_WAIT(name)						\
	wait_queue_t name = {						\
		.private	= current,				\
		.func		= autoremove_wake_function,		\
		.task_list	= LIST_HEAD_INIT((name).task_list),	\
	}

/* DECLARE_WAIT_QUEUE */
#define __WAIT_QUEUE_HEAD_INITIALIZER(name) {                \
    .lock        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值