在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);
它兩個和上面的兩個函數相對應。