精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

干貨:Linux內核中等待隊列的四個用法

如意 ? 來源:CSDN ? 作者:楊碩 ? 2020-06-20 09:59 ? 次閱讀

Linux內核里的等待隊列機制在做驅動開發時用的非常多,多用來實現阻塞式訪問,下面簡單總結了等待隊列的四種用法,希望對讀者有所幫助。

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,其他都是一樣的。

4. 老版本的睡眠函數sleep_on(wait_queue_head_t *queue):

將當前進程無條件休眠在給定的等待隊列上,極不贊成使用這個函數,因為它對競態沒有任何保護機制。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11232

    瀏覽量

    208950
  • LINUX內核
    +關注

    關注

    1

    文章

    316

    瀏覽量

    21619
收藏 人收藏

    評論

    相關推薦

    Linux驅動等待隊列與poll機制

    ,可以極大的減輕CPU負荷,在進程掛起是可以讓CPU去執行其它資源。而通過等待隊列的方式就可實現進程阻塞,滿足要求時再喚醒進程。
    的頭像 發表于 09-25 09:00 ?1821次閱讀
    <b class='flag-5'>Linux</b>驅動<b class='flag-5'>等待</b><b class='flag-5'>隊列</b>與poll機制

    RT-thread內核之消息隊列

    ,接著再初始化消息隊列,此時消息隊列為空。刪除消息隊列:rt_err_t rt_mq_delete(rt_mq_t mq);刪除消息隊列時,如果有線程被掛起在該消息
    發表于 03-06 17:17

    學習Linux四個步驟

    學習Linux四個步驟解答:學習Linux四個步驟假設你是計算機科班出身,計算機系的基本課程如數據結構、操作系統、體系結構、編譯原理、計算機網絡你全修過我想大概可以分為4
    發表于 09-24 15:27

    Linux等待隊列如何實現

    在軟件開發中任務經常由于某種條件沒有得到滿足而不得不進入睡眠狀態,然后等待條件得到滿足的時候再繼續運行,進入運行狀態。這種需求需要等待隊列機制的支持。Linux中提供了
    發表于 08-05 07:47

    OpenHarmony:內核對象隊列之算法詳解(上)

    結束生產者生產了四個消息后就結束了。3.2 FIFO算法之出隊列第一步:隊列第一消息如上圖所示我們回顧下入隊列的步驟,知道了每個消息的入隊
    發表于 08-09 10:29

    Linux內核等待隊列是什么意思?如何實現呢

    Linux內核等待隊列是以雙循環鏈表為基礎數據結構,與進程調度機制緊密結合,能夠用于實現核心的異步事件通知機制。在這個鏈表中,有兩種數據結構:等待
    發表于 08-29 16:42

    Linux內核修煉之道》精華版

    本書將Linux內核的學習分為四個層次:全面了解,掌握基本功;興趣導向,選擇重點深度鉆研;融入
    發表于 11-09 17:05 ?0次下載

    linux kernel工作隊列及源碼解析

    1. 前言 工作隊列(workqueue)的Linux內核中的定義的用來處理不是很緊急事件的回調方式處理方法。 以下代碼的linux內核版本
    發表于 10-27 10:19 ?0次下載

    linux kernel工作隊列及源碼詳細講解

    1. 前言 工作隊列(workqueue)的Linux內核中的定義的用來處理不是很緊急事件的回調方式處理方法. 以下代碼的linux內核版本
    發表于 11-30 17:43 ?589次閱讀

    poll&&epoll之poll實現

    Linux內核中等待隊列有很多用途,可用于中斷處理、進程同步及定時。我們在這里只說,進程經常必須等待某些事件的發生。
    發表于 05-14 14:41 ?833次閱讀
    poll&&epoll之poll實現

    淺談鴻蒙內核代碼調度隊列

    鴻蒙內核代碼中有兩源文件是關于隊列的,一是用于調度的隊列,另一是用于線程間通訊的IPC
    的頭像 發表于 10-23 11:00 ?1999次閱讀

    音頻處理器擁有四個內核來支持支持語音的設計

    Knowles 的新音頻處理器具有四個異構內核和 5.7 MB 共享內存,適用于手機、耳戴式可穿戴設備、智能揚聲器、電視和電器等語音驅動設備。
    的頭像 發表于 08-11 14:30 ?1379次閱讀

    Liteos-a內核工作隊列的實現原理分析及經驗總結——芯海科技PPG芯片CS1262接入OpenHarmony實戰

    摘要OpenHarmony系統中使用了liteos-m、liteos-a、linux三種內核,工作隊列linux內核引入的一種異步處理機制
    的頭像 發表于 04-26 09:26 ?2020次閱讀
    Liteos-a<b class='flag-5'>內核</b>工作<b class='flag-5'>隊列</b>的實現原理分析及經驗總結——芯海科技PPG芯片CS1262接入OpenHarmony實戰

    Linux內核網絡擁塞控制算法的實現框架(二)

    :[Linux內核網絡基礎-TCP相關的幾個關鍵結構體-小記]中進行了介紹,如下圖是四個核心結構體,四個結構的關系具有面向對象的特征,通過層層繼承,實現了類的復用;
    的頭像 發表于 07-28 11:34 ?796次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>網絡擁塞控制算法的實現框架(二)

    使用 PREEMPT_RT 在 Ubuntu 中構建實時 Linux 內核

    盟通技術干貨構建實時Linux內核簡介盟通技術干貨Motrotech如果需要在Linux中實現實時計算性能,進而有效地將
    的頭像 發表于 04-12 08:36 ?2230次閱讀
    使用 PREEMPT_RT 在 Ubuntu 中構建實時 <b class='flag-5'>Linux</b> <b class='flag-5'>內核</b>