06 休眠唤醒

第3课.Linux异常处理体系结构
源码

编程指南

需要定义一个等待队列(DECLARE_WAITQ_UEUE_HEAD)

将wait_event线程放入queue

1.休眠唤醒

1.1 休眠函数

文件路径include\linux\wait.h

函数 说明
wait_event_interrupt(wq, condition) 休眠一直到condition为真才退出 休眠期间可以被signal打断
wait_event(wq, condition) 休眠一直到condition为真才退出
wait_event_interrupt_timeout(wq, condition, timeout) 休眠一直到condition为真或者超时才退出 休眠期间可以被signal打断
wait_event_timeout(wq, condition, timeout) 休眠一直到condition为真或者超时才退出
  • wq:等待队列。

    休眠时将程序修改为非running状态,并将其放入wq队列。唤醒时从wq队列中唤醒

  • condition

    唤醒event的的一个实现标志,为真表示唤醒休眠队列

1.2 唤醒函数

函数 说明
wake_up_interruptible(x) 唤醒x休眠队列中一个状态为TASK_INTERRUPTIBLE的线程
wake_up_interruptible_nr(x, nr) 唤醒x休眠队列中nr个状态为TASK_INTERRUPTIBLE的线程
wake_up_interruptible(x) 唤醒x队列中所有状态为TASK_INTERRUPTIBLE的线程
wake_up(x) 唤醒x队列中的一个线程
wake_up_nr(x) 唤醒x队列中的nr个线程
wake_up_nr_all(x) 唤醒x队列中的所有线程

1.3 休眠与唤醒的关系

需要注意的是wait_event事件并不是调用wake_up后就能唤醒对应的事件。

wait_event事件的唤醒条件为已下条件共同触发

  • condition为真

  • wake_up事件触发

  • timeout(可选)

posted @ 2023-03-05 13:14  人民广场的二道贩子  阅读(31)  评论(0编辑  收藏  举报