在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);

  它两个和上面的两个函数相对应。