1. 睡眠等待某個條件發生(條件為假時睡眠): 睡眠方式:wait_event, wait_event_interruptible喚醒方式:wake_up (喚醒時要檢測條件是否為真,如果還為假則繼續睡眠,喚醒前一定要把條件變為真)
2. 手工休眠方式一:
1)建立並初始化乙個等待佇列項define_wait(my_wait) <==> wait_queue_t my_wait; init_wait(&my_wait);
2)將等待佇列項新增到等待佇列頭中,並設定程序的狀態
prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state)
3)呼叫schedule(),告訴核心排程別的程序執行
4)schedule返回,完成後續清理工作
finish_wait()
3. 手工休眠方式二:
1)建立並初始化乙個等待佇列項:define_wait(my_wait) <==> wait_queue_t my_wait; init_wait(&my_wait);
2)將等待佇列項新增到等待佇列頭中:
add_wait_queue
3)設定程序狀態
__set_current_status(task_interruptible);
4)schedule()
5)將等待佇列項從等待佇列中移除
remove_wait_queue()其實,這種休眠方式相當於把手工休眠方式一中的第二步prepare_to_wait拆成兩步做了,即prepare_to_wait <====>add_wait_queue + __set_current_status,其他都是一樣的。
Linux核心中等待佇列的幾種用法
linux核心裡的等待佇列機制在做驅動開發時用的非常多,多用來實現阻塞式訪問,下面簡單總結了等待佇列的四種用法,希望對讀者有所幫助。1.睡眠等待某個條件發生 條件為假時睡眠 睡眠方式 wait event,wait event interruptible 喚醒方式 wake up 喚醒時要檢測條件是...
Linux中等待佇列的實現
linux中等待佇列的實現 在軟體開發中任務經常由於某種條件沒有得到滿足而不得不進入睡眠狀態,然後等待條件得到滿足的時候再繼續執行,進入執行狀態。這種需求需要等待佇列機制的支援。linux 中提供了等待佇列的機制,該機制在核心中應用很廣泛。在linux 核心中使用等待佇列的過程很簡單,首先定義乙個 ...
linux中等待佇列的應用
linux核心裡的等待佇列機制在做驅動開發時用的非常多,多用來實現阻塞式訪問,下面簡單總結了等待佇列的四種用法,希望對讀者有所幫助。1.睡眠等待某個條件發生 條件為假時睡眠 睡眠方式 wait event,wait event interruptible 喚醒方式 wake up 喚醒時要檢測條件是...