欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

說明

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

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

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

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

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

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

責(zé)任編輯:haq

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

    關(guān)注

    5094

    文章

    19184

    瀏覽量

    307860
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    819

    瀏覽量

    119903

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

    請(qǐng)問有什么方法降低WIFI中斷的優(yōu)先級(jí)?

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

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

    在不同的優(yōu)先級(jí)安裝相同的處理程序? 我需要一個(gè)解決方案,在不同的優(yōu)先級(jí)安裝相同的處理程序(ISR),以便在我的項(xiàng)目中處理 CAT2 中斷,但我不能上傳項(xiàng)目,因?yàn)槲液炇鹆?NDA。
    發(fā)表于 05-28 08:13

    systick的中斷優(yōu)先級(jí)是否應(yīng)該設(shè)置為最高優(yōu)先級(jí)的嵌套中斷?

    最近在學(xué)習(xí)ucosii有這樣一個(gè)疑問,關(guān)于stm32的systick作為ucosii的基準(zhǔn)時(shí)鐘,systick的中斷優(yōu)先級(jí)是否應(yīng)該設(shè)置為最高優(yōu)先級(jí)的嵌套中斷。理由是什么?各位大俠求指教?。?!
    發(fā)表于 05-16 06:44

    創(chuàng)建了兩個(gè)task如果一個(gè)優(yōu)先級(jí)高 一個(gè)優(yōu)先級(jí)低,高優(yōu)先級(jí)的那個(gè)一直在做,什么時(shí)候會(huì)調(diào)度到低優(yōu)先級(jí)的呢?

    創(chuàng)建了兩個(gè)task如果一個(gè)優(yōu)先級(jí)高一個(gè)優(yōu)先級(jí)低, 我看到任務(wù)的函數(shù)都是用死循環(huán)做的,那個(gè)高優(yōu)先級(jí)的那個(gè)一直在做,什么時(shí)候會(huì)調(diào)度到低優(yōu)先級(jí)的呢?
    發(fā)表于 05-13 07:13

    STM8優(yōu)先級(jí)不夠怎么解決?

    STM8L ,中斷優(yōu)先級(jí)通過下面函數(shù)設(shè)置,但此處僅 ITC_PriorityLevel_1,ITC_PriorityLevel_2,ITC_PriorityLevel_3總共才3個(gè)中斷優(yōu)先級(jí)可設(shè)
    發(fā)表于 05-06 06:54

    嵌入式實(shí)時(shí)操作系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)問題

    死鎖預(yù)防是實(shí)時(shí)系統(tǒng)設(shè)計(jì)的一個(gè)重要因素。不幸的是,即使使用安全排除技術(shù),這可能也不是困難的終點(diǎn)。在解決資源爭(zhēng)用問題時(shí),可能引入新的優(yōu)先級(jí)翻轉(zhuǎn)問題。
    發(fā)表于 04-26 15:47 ?526次閱讀
    嵌入式實(shí)時(shí)操作系統(tǒng)<b class='flag-5'>中</b>的<b class='flag-5'>優(yōu)先級(jí)</b>反轉(zhuǎn)問題

    求助,關(guān)于stm32F4優(yōu)先級(jí)0無法搶占的問題求解

    搶占優(yōu)先級(jí)具有最高優(yōu)先級(jí)別。 現(xiàn)在我使用兩個(gè)定時(shí)器: 1)TIM2設(shè)置優(yōu)先級(jí)為0,TIM4設(shè)置優(yōu)先級(jí)為1 2)若先啟動(dòng)TIM4,延時(shí)一下再啟動(dòng)TIM2(為了先觸發(fā)定時(shí)器4
    發(fā)表于 04-23 07:26

    關(guān)于stm32cubefreertos的優(yōu)先級(jí)設(shè)置問題求解

    在用stm32cubefreertos,在配置界面里設(shè)置為12級(jí)任務(wù)優(yōu)先級(jí),但是在cube配置每個(gè)任務(wù)優(yōu)先級(jí)時(shí)還是只能選擇7種
    發(fā)表于 04-22 07:25

    STM32F103的寄存器NVIC_IPRx搶占優(yōu)先級(jí)和子優(yōu)先級(jí)是怎么設(shè)置的?

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

    Hightec對(duì)芯片中斷優(yōu)先級(jí)分配時(shí),中斷號(hào)越高中斷優(yōu)先級(jí)越高嗎?

    請(qǐng)問大佬,Hightec對(duì)芯片中斷優(yōu)先級(jí)分配時(shí),中斷號(hào)越高中斷優(yōu)先級(jí)越高嗎?看網(wǎng)上的帖子說中斷號(hào)越低優(yōu)先級(jí)越高。
    發(fā)表于 02-27 06:13

    RTTnano的用戶main函數(shù)優(yōu)先級(jí)是多少?

    RTTnano 的用戶main函數(shù)優(yōu)先級(jí)是多少?為什么會(huì)出現(xiàn)創(chuàng)建新的task之后,main函數(shù)會(huì)搶占掉低優(yōu)先級(jí)的task,例如RT_THREAD_PRIORITY_MAX設(shè)置為8 ,低于3
    發(fā)表于 02-26 08:01