在linux驱动中,可以使用等待队列来实现阻塞进程的唤醒。
1. 定义等待队列头
wait_queue_head_t mqh;
2. 初始化等待队列
init_waitqueue_head(&mqh);
也可以将以上两步合并成:DECLARE_WAITQUEUE_HREAD(name);
3.定义等待队列
DECLARE_WAITQUEUE(wq,tsk);
4.添加和移除等待队列
void fastcall add_wait_queue(&wqh,&wq);
void fastcall remove_wait_queue(&wqh,&wq);
5. 等待事件
wait_event(&wqh,condition);
wait_event_interruptable(&wqh,condition);
wait_event_timeout(&wqh,timeout);
wait_event_interruptable_timeout(&wqh,condition,timeout);
6. 唤醒等待队列
wake_up(&wqh);
wakt_up_interruptable(&wqh);
7. 在等待队列上睡眠
sleep_on(&wqh);
interruptable_sleep_on(&wqh);
它两个和上面的两个函数相对应。
转载于:https://blog.51cto.com/lijiajia/1107885