新聞中心
linux作為一種操作系統(tǒng),等待隊列機制在內(nèi)核中發(fā)揮著非常重要的作用。比如,在處理臨界區(qū)的訪問,需要實現(xiàn)消息循環(huán),消息隊列管理異步事件等情況,都需要用到等待隊列。其工作方式是,當發(fā)生請求時,會根據(jù)狀態(tài)和目的地址,將請求加入等待隊列中,等待cpu執(zhí)行。

創(chuàng)新互聯(lián)企業(yè)建站,十多年網(wǎng)站建設經(jīng)驗,專注于網(wǎng)站建設技術,精于網(wǎng)頁設計,有多年建站和網(wǎng)站代運營經(jīng)驗,設計師為客戶打造網(wǎng)絡企業(yè)風格,提供周到的建站售前咨詢和貼心的售后服務。對于網(wǎng)站建設、成都網(wǎng)站設計中不同領域進行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準市場調(diào)研,為客戶提供的解決方案。
下面,我們就以Linux系統(tǒng)為例,來介紹一下等待隊列的運用。首先,要了解等待隊列,需要分析和理解內(nèi)核操作系統(tǒng)中的代碼,下面以一段核心模塊的常用函數(shù)__wait.on_bit()為例,介紹一下它的運用和實現(xiàn)的步驟:
void __wait_on_bit(struct wait_queue_head *WQ, struct wait_queue_entry *wq_entry,int (*action)(struct wait_queue_entry *))
{
struct wait_queue *wait;
signed long timeout;
//注冊要等待的wait queue
wait = prepare_to_wait_exclusive(wq, wq_entry, TASK_UNINTERRUPTIBLE);
timeout = MAX_SCHEDULE_TIMEOUT;
//釋放wq->lock鎖
smp_mb();
//等待隊列條件滿足
while (!(*action)(wq_entry)) {
timeout = io_schedule_timeout(timeout);
wait_io_event_timeout(wq_entry, timeout);
//重新獲得wq->lock
smp_mb();
if (signal_pending_state(TASK_UNINTERRUPTIBLE, wq_entry->private))
break;
}
//結束wait并獲取wq->lock
finish_wait(wq, wait);
}
這段代碼的框架如下:首先,需要注冊一個進入等待的隊列wait,隨后會獲取超時時間timeout,然后釋放鎖wq->lock,同時檢查等待條件是否滿足。如果滿足,則調(diào)用io_schedule_timeout()方法進行超時處理;如果不滿足,通過wait_io_event_timeout()方法進行等待,直到條件滿足時才結束等待。最后,重新獲得wq->lock,等待結束。
以上,就是Linux等待隊列的運用,從而實現(xiàn)臨界區(qū)的處理,信號的傳遞以及消息的處理等功能。其中,需要特別注意的是,wait中的隊列,在進行wait_io_event_timeout()操作前,要保證能夠獲得可執(zhí)行的lock,以保證在等待過程中的安全性。
創(chuàng)新互聯(lián)網(wǎng)絡推廣網(wǎng)站建設,網(wǎng)站設計,網(wǎng)站建設公司,網(wǎng)站制作,網(wǎng)頁設計,1500元定制網(wǎng)站優(yōu)化全包,先排名后付費,已為上千家服務,聯(lián)系電話:13518219792
當前名稱:解析Linux等待隊列的運用(linux等待隊列的使用)
鏈接地址:http://m.5511xx.com/article/coosdhs.html


咨詢
建站咨詢
