schedule_delayed_work 简介

schedule_delayed_work 是 Linux 内核中用于延迟执行工作的函数。它的主要作用是将一个任务(work)安排在指定的延迟时间后在内核全局工作队列中执行[1][2].

函数原型如下:

static inline bool schedule_delayed_work(struct delayed_work *dwork,
                                         unsigned long delay)

其中:

  • dwork: 要执行的延迟工作(delayed work)
  • delay: 延迟时间,单位为 jiffies[1][2]

使用方法:

  1. 通常将毫秒转换为 jiffies:

    schedule_delayed_work(&work, msecs_to_jiffies(poll_interval));
    
  2. 当指定的延迟时间到达时,delayed_work 结构体中的 work 成员的 func() 函数会被执行[1].

  3. 对于周期性任务,可以在工作函数中再次调用 schedule_delayed_work() 来实现循环执行[1][2].

schedule_delayed_work() 实际上是对 queue_delayed_work() 的封装,它使用系统全局工作队列 system_wq[3]:

return queue_delayed_work(system_wq, dwork, delay);

如果需要取消已经安排的延迟工作,可以使用以下函数:

  • cancel_delayed_work(): 尝试取消延迟工作,但不等待正在执行的工作完成[2].
  • cancel_delayed_work_sync(): 取消延迟工作并等待它完成执行[1][2].

使用 schedule_delayed_work() 的优势在于它将工作交给内核线程执行,避免在中断上下文中执行耗时操作,提高了系统的响应性和可靠性[7][8].

Citations:
[1] https://blog.csdn.net/yueni_zhao/article/details/127550651
[2] https://www.cnblogs.com/zhiminyu/p/17628497.html
[3] https://github.com/apachecn/apachecn-linux-zh/blob/master/docs/linux-device-driver-dev/03.md
[4] https://www.cnblogs.com/yanghong-hnu/p/4671350.html
[5] https://blog.csdn.net/xiaowen_10/article/details/7997017
[6] http://www.360doc.com/content/14/0221/21/5073814_354607390.shtml
[7] https://jasonblog.github.io/note/linux_kernel/ff08_wu_ff09_ff1a_xia_ban_bu_ji_zhi_zhi_gong_zuo_d.html
[8] https://juejin.cn/post/6844903649756315655

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值