唤醒机制:等待队列
admin
2024-05-03 21:10:13
0

等待队列

等待队列是内核中非常常见的唤醒机制,等待者加入等待队列等待唤醒者进行唤醒,会有唤醒者主动执行唤醒函数。默认的唤醒函数就是调用try_to_wake_up唤醒目标任务,然后将等待者从等待队列中移除,但是允许使用者自定义唤醒函数。等待队列的实现主要是队列头struct wait_queue_head 和队列条目struct wait_queue_entry 两个结构体,两个结构体的定义如下:

struct wait_queue_entry {unsigned int		flags; void			*private;wait_queue_func_t	func;struct list_head	entry;
};struct wait_queue_head {spinlock_t		lock;struct list_head	head;
}

队列头的lock是用来保护队列操作,队列的添加删除都需要持有lock自旋锁。每个等待队列条目都作为链表的一个节点加入到等待队列开始阻塞等待,并且在被唤醒后从等待队列中摘除。
等待队列并不是很严格封装的一个结构,由于其数据结构非常简单,有的模块可以绕过API直接进行数据结构的操作,或者说模块本身认为自身足够简单,数据结构就是API的一部分。等待队列虽然简单,但是它却要适用于各种调用场所,并且由于默认的唤醒函数try_to_wake_up需要传入一个当前任务的状态作为参数,唤醒等待队列的时候就需要传入各种状态参数,这种封装如下:

#define wake_up(x)			__wake_up(x, TASK_NORMAL, 1, NULL)
#define wake_up_nr(x, nr)		__wake_up(x, TASK_NORMAL, nr, NULL)
#define wake_up_all(

相关内容

热门资讯

北方华创,巨额商誉压力突然高悬... 文丨詹詹编辑丨百进来源丨新商悟(本文约为 1300字)当国内半导体设备龙头北方华创交出一份“营收创历...
长城华西银行原女掌门已回老东家... 湘财Plus注意到,四川银行入主长城华西银行后,该行核心管理人员调整基本落定,法定代表人已正式变更为...
立案,跌停!这家“童年记忆”,... 沉浮多年,方向何在?最近被立案的上市公司,着实有些多,就在上周末,又有一家上市公司及原董事长被立案调...
加码生态环境监测!生态环境部:... 本文来源:时代周报 作者:李杭4月27日,生态环境部举行4月例行新闻发布会。 生态环境部4月例行新...
东方甄选主播“离职潮”持续发酵... 红星资本局4月27日消息,东方甄选(01797.HK)主播“离职潮”事件仍在发酵。在社交平台上,有部...
SpaceX万亿IPO前夜:马... 从20亿美元收购,到万亿IPO前的最后叙事。2026年4月23日深夜,特斯拉向SEC提交了一份季报文...
前董事长陆宏达“闪电辞职”牵扯... 紧急澄清前董事长性侵指控后,智度股份仍难挡股价大跌。4月27日,智度股份早盘一度重挫逾9%,逼近6....
高盛:一场全球性化工危机正在爆... 霍尔木兹海峡通行受阻,正在引发一场史无前例的全球化工供应冲击。高盛最新报告表示,基础化工品价格近几周...
这笔400亿,谷歌买的不是友谊... 4月25日,Anthropic宣布谷歌将向其投资最高400亿美元——先期注入100亿美元现金,估值3...
粪坑,爬出来了 粪坑,爬出来了... 图:Simon Bailly 读者说:“有人发现吗?2019年蚂蚁的大热基金鹏华快回本了,当年最高回...