女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

開發(fā)過程中是什么原因?qū)е聝?yōu)先級翻轉(zhuǎn)的?

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:Rice嵌入式開發(fā)技術(shù)分享 ? 作者:Rice嵌入式開發(fā)技術(shù) ? 2021-05-28 15:28 ? 次閱讀

最近在開發(fā)過程中,遇到一個問題線程優(yōu)先級翻轉(zhuǎn)的問題。那什么原因?qū)е聝?yōu)先級翻轉(zhuǎn)呢?

RTOS開發(fā)中,優(yōu)先級翻轉(zhuǎn)問題也是值得我們?nèi)リP(guān)注留意的。避免代碼癱瘓。

什么是優(yōu)先級翻轉(zhuǎn)

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

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

如何解決優(yōu)先級翻轉(zhuǎn)

解決優(yōu)先級翻轉(zhuǎn)的方法:優(yōu)先級天花板、優(yōu)先級繼承。那么這兩種方法有什么?

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

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

RT-Thread是如何解決線程優(yōu)先級翻轉(zhuǎn)呢?

在官方的文檔中,對線程優(yōu)先級翻轉(zhuǎn)有相對應(yīng)的說明及解決方法。下面我把RT-THREAD官方的描述及解決方法貼出來。

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

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

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

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

說明

對于我們開發(fā)來說,要避免發(fā)生優(yōu)先級翻轉(zhuǎn)的問題。

優(yōu)先級翻轉(zhuǎn)的危害:

任務(wù)調(diào)度時,時間不確定性,破壞實時系統(tǒng)的實時性,嚴重時可能導(dǎo)致系統(tǒng)崩潰。

優(yōu)先級低的任務(wù)比優(yōu)先級高的任務(wù)更先執(zhí)行,導(dǎo)致任務(wù)的錯亂,邏輯的錯亂。

原文標(biāo)題:線程優(yōu)先級翻轉(zhuǎn),如何避免?

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5133

    文章

    19501

    瀏覽量

    314281
  • RTOS
    +關(guān)注

    關(guān)注

    24

    文章

    838

    瀏覽量

    120689

原文標(biāo)題:線程優(yōu)先級翻轉(zhuǎn),如何避免?

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    CyU3PDebugPrint的最高優(yōu)先級和最低優(yōu)先級是什么?

    [i]CyU3PDebugPrint的最高優(yōu)先級和最低優(yōu)先級是什么?
    發(fā)表于 05-13 08:22

    配電柜—斷電危機?配電柜故障排查優(yōu)先級指南

    在排查配電柜故障過程中,合理安排排查優(yōu)先級至關(guān)重要。下面聊一下如何科學(xué)合理安排配電柜故障排查優(yōu)先級順序。
    的頭像 發(fā)表于 03-06 18:55 ?252次閱讀
    配電柜—斷電危機?配電柜故障排查<b class='flag-5'>優(yōu)先級</b>指南

    在linux下開發(fā)過程中, DLP4500 GUI無法連接光機怎么解決?

    在linux下開發(fā)過程中, DLP4500 GUI 無法連接光機,出現(xiàn)錯誤提示如下: open device_handle error: Is a directory opening path
    發(fā)表于 02-20 08:41

    儲能變流器小功率充電過程中功率不穩(wěn)定是什么原因

    儲能變流器小功率充電過程中功率不穩(wěn)定是什么原因
    發(fā)表于 12-13 21:54

    使用CH32V103C8TC設(shè)置中斷優(yōu)先級分組時,編譯報錯的原因

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

    freertos中斷優(yōu)先級在哪設(shè)置

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

    什么原因導(dǎo)致壓力傳感器漂移?

    什么原因導(dǎo)致壓力傳感器漂移的呢?我們在設(shè)計的時候怎么才能消除壓力傳感器漂移呢?
    的頭像 發(fā)表于 08-22 18:00 ?1480次閱讀
    <b class='flag-5'>什么原因</b><b class='flag-5'>導(dǎo)致</b>壓力傳感器漂移?

    OPA4192在使用過程中,芯片發(fā)燙是什么原因導(dǎo)致的?

    OPA4192在使用過程中,芯片發(fā)燙,我們的供電電壓是正負16V,是因為供電電壓太高導(dǎo)致的嘛?有這方面的數(shù)據(jù)嘛?
    發(fā)表于 08-05 07:27

    設(shè)備運行過程中,調(diào)用云端接口后報status500的原因?如何解決?

    在設(shè)備運行過程中出現(xiàn),調(diào)用云端接口后,報500,設(shè)備接收到了云端發(fā)過來數(shù)據(jù),并執(zhí)行了動作! 想問導(dǎo)致status500錯誤具體可能的情況和原因是什么?如何解決?
    發(fā)表于 07-18 06:48

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

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

    APS智能優(yōu)化排產(chǎn)軟件的優(yōu)先級應(yīng)用

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

    ESP32S2如何設(shè)置中斷優(yōu)先級

    ESP32S2有六中斷, 如何設(shè)置中斷優(yōu)先級? 比如在GPIO例程里 ,這種中斷優(yōu)先級是如何設(shè)置的呢? 中斷寄存器列表里 ,只有簡稱,哪里能獲取這個名稱所對應(yīng)的功能??
    發(fā)表于 06-21 07:59

    請問有什么方法降低WIFI中斷的優(yōu)先級

    因為項目對時序輸出要求比較嚴格,WIFI中斷優(yōu)先級比硬件定時器中斷優(yōu)先級要高,在定時器中斷里面對GPIO管腳控制被延長執(zhí)行,請問有什么方法降低WIFI中斷的優(yōu)先級
    發(fā)表于 06-19 07:37

    為什么不能在不同的優(yōu)先級安裝相同的處理程序?

    在不同的優(yōu)先級安裝相同的處理程序? 我需要一個解決方案,在不同的優(yōu)先級安裝相同的處理程序(ISR),以便在我的項目中處理 CAT2 中斷,但我不能上傳項目,因為我簽署了 NDA。
    發(fā)表于 05-31 08:16

    如何在不同優(yōu)先級安裝相同的處理程序?

    在不同的優(yōu)先級安裝相同的處理程序? 我需要一個解決方案,在不同的優(yōu)先級安裝相同的處理程序(ISR),以便在我的項目中處理 CAT2 中斷,但我不能上傳項目,因為我簽署了 NDA。
    發(fā)表于 05-28 08:13