linux调度--wait与complete

本文介绍了Linux内核中的wait与complete机制,包括struct completion数据结构及其成员,详细阐述了等待事件和事件完成的步骤。此外,还提到了workqueue的工作队列概念,以及如何调度内核线程执行工作。
摘要由CSDN通过智能技术生成

wait与complete机制涉及的主要数据结构为struct completion,所有的操作都围绕该数据结构来进行。


让我们来看看该数据结构的成员:

struct completion {
unsigned int done;
wait_queue_head_t wait;
}

done:表示事件完成的状态,为0时表示还有任务在等待事件的发生,非0时表示所有等待的事件已经都发生了

wait:所有等待的任务都会以双向链表的方式注册到此


使用该机制的步骤如下:

1、使用DECLARE_COMPLETION宏创建一个struct completion;

2、需要等待特定事件(比如事件1#)发生的任务(比如任务1#)调用wait_for_completion挂起,等待事件的发生;

3、事件1#发生后调用complete通知任务事件已经完成;由于wait_for_completion使用的回调函数是default_wake_function,该函数其实就是唤醒任务自己,所以到此时任务1#被唤醒开始执行;


几点小补充:

1、wait_for_completion还有几个变种,可分别设置等待超时时间、任务是否可在中途被唤醒或者kill掉;



workqueue, 中文称其为工作队列,是一个用于创建内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值