linux設備驅動的阻塞和非阻塞io

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

  它兩個和上面的兩個函數相對應。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章