06 休眠唤醒
编程指南
需要定义一个等待队列(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(可选) 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号