1. 程式人生 > >Linux程序休眠和喚醒

Linux程序休眠和喚醒

喚醒函式
很少會需要呼叫wake_up_interruptible 之外的喚醒函式,但為完整起見,這裡是整個集合:
wake_up(wait_queue_head_t *queue); 
wake_up_interruptible(wait_queue_head_t *queue); 
wake_up 喚醒佇列中的每個非獨佔等待程序和一個獨佔等待程序。wake_up_interruptible 同樣, 除了它跳過處於不可中斷休眠的程序。它們在返回之前, 使一個或多個程序被喚醒、被排程(如果它們被從一個原子上下文呼叫, 這就不會發生).
wake_up_nr(wait_queue_head_t *queue, int nr); 
wake_up_interruptible_nr(wait_queue_head_t *queue, int nr); 
這些函式類似 wake_up, 除了它們能夠喚醒多達 nr 個獨佔等待者, 而不只是一個. 注意傳遞 0 被解釋為請求所有的互斥等待者都被喚醒
wake_up_all(wait_queue_head_t *queue); 
wake_up_interruptible_all(wait_queue_head_t *queue); 
這種 wake_up 喚醒所有的程序, 不管它們是否進行獨佔等待(可中斷的型別仍然跳過在做不可中斷等待的程序)
wake_up_interruptible_sync(wait_queue_head_t *queue); 
一個被喚醒的程序可能搶佔當前程序, 並且在 wake_up 返回之前被排程到處理器。 但是, 如果你需要不要被排程出處理器時,可以使用 wake_up_interruptible 的"同步"變體. 這個函式最常用在呼叫者首先要完成剩下的少量工作,且不希望被排程出處理器時。