色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

開發過程中是什么原因導致優先級翻轉的?

RTThread物聯網操作系統 ? 來源:Rice嵌入式開發技術分享 ? 作者:Rice嵌入式開發技術 ? 2021-05-28 15:28 ? 次閱讀

最近在開發過程中,遇到一個問題線程優先級翻轉的問題。那什么原因導致優先級翻轉呢?

RTOS開發中,優先級翻轉問題也是值得我們去關注留意的。避免代碼癱瘓。

什么是優先級翻轉

所謂的優先級翻轉問題:即當一個高優先級線程通過信號量機制訪問共享資源時,該型號量以被一個低優先級線程占有,而這個低優先級的任務在訪問共享資源時可能又被一個中等優先級任務搶占。從上面的描述,高優先級線程被許多較低優先級的任務阻塞,導致高優先級的實時性得不到保證。

舉例:有三個線程分別為:A、B、C。優先級A 》 B 》 C,線程A和B處于掛起狀態,等待某一事件發生,線程C正在運行,此時任務C開始使用共享資源Source。在使用Source時,線程A等待事件到來,線程A轉為就緒態,因為線程A優先級比線程C高,所以線程A會立即執行。當線程A要使用共享資源Source時,由于共享資源Source正在被線程C使用,因此線程A被掛起,線程C開始運行。如果此時中等優先級線程B等待事件到來,則線程B轉為就緒態。由于線程B優先級比線程C高,因此線程B開始運行,直到其運行完畢,線程C才開始運行。直到線程C釋放共享資源Source后,線程A才得以執行。在這種情況下,優先級發生了翻轉,線程B先于線程A運行。

如何解決優先級翻轉

解決優先級翻轉的方法:優先級天花板、優先級繼承。那么這兩種方法有什么?

優先級天花板優先級天花板是當線程申請某資源時,把該線程的優先級提升到可訪問這個資源的所有線程中的最高優先級,這個優先級稱為該資源的優先級天花板。這種方法簡單易行,不必進行復雜的判斷,不管線程是否阻塞了高優先級線程的運行, 只要線程訪問共享資源都會提升線程的優先級。

優先級繼承優先級繼承是當線程A申請共享資源Source時,如果共享資源Source正在被線程C使用,通過比較線程C與自身的優先級,如發現線程C的優先級小于自身的優先級, 則將線程C的優先級提升到自身的優先級,線程C釋放資源Source后,再恢復線程C的原優先級。這種方法只在占有資源的低優先級線程阻塞了高優先級線程時才動態的改變線程的優先級。

RT-Thread是如何解決線程優先級翻轉呢?

在官方的文檔中,對線程優先級翻轉有相對應的說明及解決方法。下面我把RT-THREAD官方的描述及解決方法貼出來。

使用信號量會導致的另一個潛在問題是線程優先級翻轉問題。所謂優先級翻轉,即當一個高優先級線程試圖通過信號量機制訪問共享資源時,如果該信號量已被一低優先級線程持有,而這個低優先級線程在運行過程中可能又被其它一些中等優先級的線程搶占,因此造成高優先級線程被許多具有較低優先級的線程阻塞,實時性難以得到保證。如下圖所示:有優先級為 A、B 和 C 的三個線程,優先級 A 》 B 》 C。線程 A,B 處于掛起狀態,等待某一事件觸發,線程 C 正在運行,此時線程 C 開始使用某一共享資源 M。在使用過程中,線程 A 等待的事件到來,線程 A 轉為就緒態,因為它比線程 C 優先級高,所以立即執行。但是當線程 A 要使用共享資源 M 時,由于其正在被線程 C 使用,因此線程 A 被掛起切換到線程 C 運行。如果此時線程 B 等待的事件到來,則線程 B 轉為就緒態。由于線程 B 的優先級比線程 C 高,因此線程 B 開始運行,直到其運行完畢,線程 C 才開始運行。只有當線程 C 釋放共享資源 M 后,線程 A 才得以執行。在這種情況下,優先級發生了翻轉:線程 B 先于線程 A 運行。這樣便不能保證高優先級線程的響應時間。

c24609a4-be57-11eb-9e57-12bb97331649.png

在 RT-Thread 操作系統中,互斥量可以解決優先級翻轉問題,實現的是優先級繼承算法。優先級繼承是通過在線程 A 嘗試獲取共享資源而被掛起的期間內,將線程 C 的優先級提升到線程 A 的優先級別,從而解決優先級翻轉引起的問題。這樣能夠防止 C(間接地防止 A)被 B 搶占,如下圖所示。優先級繼承是指,提高某個占有某種資源的低優先級線程的優先級,使之與所有等待該資源的線程中優先級最高的那個線程的優先級相等,然后執行,而當這個低優先級線程釋放該資源時,優先級重新回到初始設定。因此,繼承優先級的線程避免了系統資源被任何中間優先級的線程搶占。

c2536888-be57-11eb-9e57-12bb97331649.png

說明

對于我們開發來說,要避免發生優先級翻轉的問題。

優先級翻轉的危害:

任務調度時,時間不確定性,破壞實時系統的實時性,嚴重時可能導致系統崩潰。

優先級低的任務比優先級高的任務更先執行,導致任務的錯亂,邏輯的錯亂。

原文標題:線程優先級翻轉,如何避免?

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    5087

    文章

    19145

    瀏覽量

    306120
  • RTOS
    +關注

    關注

    22

    文章

    817

    瀏覽量

    119717

原文標題:線程優先級翻轉,如何避免?

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用CH32V103C8TC設置中斷優先級分組時,編譯報錯的原因

    使用CH32V103C8TC設置中斷優先級分組時,設置為NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);編譯報錯 而使用NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 卻不會報錯 這是
    發表于 09-27 06:03

    freertos中斷優先級在哪設置

    FreeRTOS是一個流行的實時操作系統,它廣泛應用于嵌入式系統開發。在FreeRTOS,中斷優先級是一個重要的概念,因為它決定了中斷處理的順序和響應時間。 1. 理解中斷優先級
    的頭像 發表于 09-02 14:17 ?712次閱讀

    esp32s3 ota升級過程中,RGBLCD+LVGL顯示異常,屏幕畫面閃爍跳動是什么原因導致的?

    esp32s3 ota升級過程中,RGBLCD+LVGL顯示異常,屏幕畫面閃爍跳動,不進行ota升級時,LCD顯示正常,這有可能是什么原因導致嗎?
    發表于 06-27 08:10

    APS智能優化排產軟件的優先級應用

    資源、訂單需求和約束條件,自動計算出最優的生產計劃。在這個過程中,訂單排產的優先規則起著至關重要的作用。1.交期優先級交期優先級是訂單排產中最基本的
    的頭像 發表于 06-26 17:43 ?410次閱讀
    APS智能優化排產軟件的<b class='flag-5'>優先級</b>應用

    systick的中斷優先級是否應該設置為最高優先級的嵌套中斷?

    最近在學習ucosii有這樣一個疑問,關于stm32的systick作為ucosii的基準時鐘,systick的中斷優先級是否應該設置為最高優先級的嵌套中斷。理由是什么?各位大俠求指教!!!
    發表于 05-16 06:44

    創建了兩個task如果一個優先級高 一個優先級低,高優先級的那個一直在做,什么時候會調度到低優先級的呢?

    創建了兩個task如果一個優先級高一個優先級低, 我看到任務的函數都是用死循環做的,那個高優先級的那個一直在做,什么時候會調度到低優先級的呢?
    發表于 05-13 07:13

    嵌入式實時操作系統優先級反轉問題

    死鎖預防是實時系統設計的一個重要因素。不幸的是,即使使用安全排除技術,這可能也不是困難的終點。在解決資源爭用問題時,可能引入新的優先級翻轉問題。
    發表于 04-26 15:47 ?486次閱讀
    嵌入式實時操作系統<b class='flag-5'>中</b>的<b class='flag-5'>優先級</b>反轉問題

    求助,關于stm32F4優先級0無法搶占的問題求解

    搶占優先級具有最高優先級別。 現在我使用兩個定時器: 1)TIM2設置優先級為0,TIM4設置優先級為1 2)若先啟動TIM4,延時一下再啟動TIM2(為了先觸發定時器4
    發表于 04-23 07:26

    關于stm32cubefreertos的優先級設置問題求解

    在用stm32cubefreertos,在配置界面里設置為12任務優先級,但是在cube配置每個任務優先級時還是只能選擇7種
    發表于 04-22 07:25

    STM32F103的寄存器NVIC_IPRx搶占優先級和子優先級是怎么設置的?

    STM32F103的寄存器NVIC_IPRx有些不明白,搶占優先級和子優先級是怎么設置的? 如果,中斷分組2,搶占優先級3,子優先級3 那下面這樣寫對嗎? SCB->AIR
    發表于 03-27 07:48

    Hightec對芯片中斷優先級分配時,中斷號越高中斷優先級越高嗎?

    請問大佬,Hightec對芯片中斷優先級分配時,中斷號越高中斷優先級越高嗎?看網上的帖子說中斷號越低優先級越高。
    發表于 02-27 06:13

    RTTnano的用戶main函數優先級是多少?

    RTTnano 的用戶main函數優先級是多少?為什么會出現創建新的task之后,main函數會搶占掉低優先級的task,例如RT_THREAD_PRIORITY_MAX設置為8 ,低于3
    發表于 02-26 08:01

    M0516優先級怎么設置?

    新唐M0516優先級的設置,有沒有示例,沒找到相關接口,謝謝!
    發表于 01-16 07:25

    華為和思科默認路由優先級

    優先級值不同,則優先級值最小的為最優路由(無論開銷值是否相同,另一種理解就是對不同路由來源或路由協議之間的比較)。
    的頭像 發表于 01-11 10:47 ?1303次閱讀

    GD32如何配置中斷優先級分組以及中斷優先級

    使用GD32 MCU的過程中,大家可能會有以下疑問:中斷優先級如何配置和使用?
    的頭像 發表于 01-10 10:30 ?3140次閱讀
    GD32如何配置中斷<b class='flag-5'>優先級</b>分組以及中斷<b class='flag-5'>優先級</b>
    主站蜘蛛池模板: 国产成在线观看免费视频| 俄罗斯XBXBXB兽交| 欧美成人无码视频午夜福利| 40岁东北老阿姨无码| 欧美特黄三级成人| 嘟嘟嘟WWW免费高清在线中文| 午夜精品久久久内射近拍高清 | 日韩在线 无码 精品| 国产精品卡1卡2卡三卡四| 野花韩国中文版免费观看| 美女被男人撕衣舔胸| 国产a级午夜毛片| 在线亚洲专区中文字幕| 三叶草未满十八岁| 久草在线福利资站免费视频| japanese色系free日本| 亚洲第一页视频| 男女牲交大战免费播放| 国产免费高清mv视频在线观看| 中文日产无乱码AV在线观| 三级电影免费看| 啦啦啦影院视频在线看高清...| 草民电影网午夜伦理电影网| silk118中文字幕无删减| 国内精品偷拍在线观看| 无套内谢大学生A片| 两性午夜色视频免费网站| 国产成人自拍视频在线观看| 折磨比基尼美女挠肚子| 无码人妻视频又大又粗欧美| 美女张开腿让男生桶动态图| 国产嫩草在线观看| YELLOW高清视频免费观看| 亚洲中文日韩日本在线视频| 试看做受120秒免费午夜剧场| 久青草国产在线视频| 国产亚洲精品 在线视频 香蕉| good神马电影伦理午夜| 又长又大又粗又硬3p免费视频| 忘忧草研究院一二三| 漂亮的保姆6在线观看中文|