在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

互斥鎖不能在中斷中使用?

冬至子 ? 來源:ITRelief ? 作者:Sachefgh Xu ? 2023-07-25 15:36 ? 次閱讀

互斥鎖的概念

互斥鎖是一種特殊的二值信號量,因為它解決了優先級翻轉的問題。可以通過優先級繼承機制來解決:當另外一個的任務試圖獲取同一個互斥鎖時,已經獲得互斥鎖的任務將繼承該任務的優先級。

互斥鎖有一個比較明顯的特點,即它必須哪一個線程申請,就由該線程來釋放。而在二值信號量中,釋放和獲取token的線程可以不一致。因此,在處理線程之間占用同一硬件資源的問題時首先考慮使用互斥鎖。

API Description 【互斥鎖不能在中斷中使用】

①創建互斥鎖

在CMSIS-RTOS中,互斥鎖通過 ***osMutexNew() *** 函數和配置結構體 *osMutexAttr_t *建立。

1)配置結構體osMutexAttr_t

osMutexAttr_t 中功能參數 *attr_bits ***用于配置互斥鎖的功能特性,相當重要;參數相關定義包括: **

1.* osMutexRecursive * - 創建遞歸互斥鎖。當上鎖開鎖的程序段遞歸時,會出現多重加鎖的情況,并從深處向外解鎖。此時應當引入對遞歸的支持。本參數配置了一個遞歸計數機制,允許同一個線程多重加鎖;調用一次計數+1,釋放-1;當計數回到0時此鎖解開。

2.osMutexPrioInherit - 優先級繼承機制。可以防止優先級翻轉。

  1. *osMutexRobust * - 互斥鎖回收機制。當加鎖的線程被 osThreadExit() 或 *osThreadTerminate() *終止而未能解鎖時,鎖將會自動回收。

上述三個參數可以通過邏輯或( | )組合傳入結構體。

typedef struct {
  const char                   *name;   ///名稱,僅標識用
  uint32_t                 attr_bits;   ///功能參數;重要
  void                       *cb_mem;   /// memory for control block;Default ==NULL
  uint32_t                   cb_size;   /// Default==0U
} osMutexAttr_t;

@param    attr_bits:  -參數配置;可通過邏輯或 輸入復數的參數
        / osMutexPrioInherit  -使用優先級繼承
        / osMutexRecursive    -遞歸互斥鎖
        / osMutexRobust       -自回收;當線程終止時自動釋放持有的token
  1. 通過 ***osMutexNew() ***創建目標互斥鎖
osMutexId_t osMutexNew (const osMutexAttr_t *attr);/*創建互斥鎖
@param    *attr    -osMutexAttr_t互斥鎖配置結構體
@retval    -句柄(地址)
            ==NULL   創建失敗*/

**②刪除互斥鎖 **osMutexDelete()

osStatus_t osMutexDelete( osMutexId_t  mutex_id );/*刪除互斥鎖
@retval:    -osOK //成功
            -osErrorParameter: parameter mutex_id is NULL or invalid.
            -osErrorResource: the mutex is in an invalid state.(其他錯誤)
            -osErrorISR: 在中斷調用導致的錯誤
*/

③獲取互斥鎖token osMutexAcquire()

互斥鎖token的獲取與二值信號量基本一致。 線程調用該函數時,當鎖中無token時,線程進入BLOCK狀態等待消息量被放入token;。在此期間當任務檢測到消息量放入token時,將自動由****BLOCK態轉移為READY態。當等待的時間超過了指定的阻塞時間,即使隊列中尚無數據,任務也會自動從阻塞態轉移為READY態。此時程序會返回osErrorTimeout錯誤。若沒有設置阻塞超時且參數正確,返回osErrorResource錯誤**。**

osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout);/*取得token;
@param      timeout      阻塞等待時間
@retval    -osOK: the mutex has been obtained.
           -osErrorTimeout: the mutex could not be obtained in the given time.
           -osErrorResource: the mutex could not be obtained when no timeout was specified.
           -osErrorParameter: parameter mutex_id is NULL or invalid.
           -osErrorISR: cannot be called from interrupt service routines.
*/

timeout參數:

== 0U //不設置阻塞超時時間,若出現異常函數將直接報錯返回
== osWaitForever //任務將一直阻塞直到鎖中token被相應線程歸還
== Ticks //設置具體等待時間,單位為RTOS心跳數(Ticks)

④歸還互斥鎖tokenosMutexRelease() ****

注意互斥鎖的token歸還只能由獲取的線程進行,否則系統會報Resource錯誤。

osStatus_t osMutexRelease (osMutexId_t mutex_id);/*歸還互斥鎖
@retval      -osOK: 成功
             -osErrorResource: 無法歸還(當前token沒有被獲取 或 本線程不持有互斥鎖的token)
             -osErrorParameter: parameter mutex_id is NULL or invalid.
             -osErrorISR: 在中斷中調用了本函數
*/
```**⑤查詢當前互斥鎖token的擁有者(線程)****  ***osMutexGetOwner()*********

osThreadId_t osMutexGetOwner (osMutexId_t mutex_id)/*
@retval -持有互斥鎖token的線程句柄(ID);
若token未被持有或 發生錯誤,則返回NULL
*/


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

    關注

    68

    文章

    19295

    瀏覽量

    230001
  • RTOS
    +關注

    關注

    22

    文章

    814

    瀏覽量

    119686
  • ISR
    ISR
    +關注

    關注

    0

    文章

    38

    瀏覽量

    14441
收藏 人收藏

    評論

    相關推薦

    Linux高級編程---互斥

    在Linux系統里,有很多的應用,包括互斥,文件,讀寫等等,信號量其實也應該是的一種。
    發表于 01-13 10:07

    信號量、互斥、自旋

    信號量、互斥、自旋http://bbs.edu118.com/forum.php?mod=viewthread&tid=488&fromuid=231(出處: 信盈達IT技術社
    發表于 08-29 09:48

    BearPi-HM_Nano開發板鴻蒙OS內核編程開發——互斥

    :不能在中斷服務調用該函數參數:[td]名字描述attr互斥對象的屬性.osMutexAcquire()osStatus_t osMutexAcquire(osMutexId_t mutex_id
    發表于 04-09 10:02

    如何在RK2206上使用鴻蒙LiteOS-M內核接口進行互斥編程開發

    注意的是,互斥不能在中斷服務程序中使用。API分析LOS_MuxCreate()UINT32 LOS_MuxCreate(UINT32 *
    發表于 08-05 16:28

    很多變量多線程讀寫是使用關中斷好還是使用互斥進行保護呢?

    會打斷當前線程去獲取同一個互斥量,由于被占,高優先級掛起,低優先級繼續執行,釋放互斥后高優先級執行。這樣會有多兩次線程切換開銷。 2.如果在讀寫的時候進入
    發表于 05-05 14:14

    華為物聯網操作系統LiteOS內核教程05-互斥

    1. LiteOS的互斥 1.1. 互斥 在多任務環境下,往往存在多個任務競爭同一共享資源的應用場景,互斥
    發表于 03-13 16:19 ?1200次閱讀
    華為物聯網操作系統LiteOS內核教程05-<b class='flag-5'>互斥</b><b class='flag-5'>鎖</b>

    深入了解互斥、條件變量、讀寫以及自旋

    C++11只包含其中的部分。接下來我主要通過pthread的API來展開本文。 mutex(互斥量) mutex(mutual exclusive)即互斥量(互斥體)。也便是常說的互斥
    的頭像 發表于 11-01 10:02 ?1897次閱讀

    Linux中的傷害/等待互斥介紹

    序言:近期讀Linux 5.15的發布說明,該版本合并了實時機制,當開啟配置宏CONFIG_PREEMPT_RT的時候,這些被基于實時互斥的變體替代:mutex、ww_mutex
    的頭像 發表于 11-06 17:27 ?2676次閱讀

    Linux下線程間通訊--互斥

    互斥是一種簡單的加鎖的方法來控制對共享資源的存取,當多個線程訪問公共資源時,為了保證同一時刻只有一個線程獨占資源,就可以通過互斥加以限制,在一個時刻只能有一個線程掌握某個
    的頭像 發表于 08-24 15:53 ?1973次閱讀
    Linux下線程間通訊--<b class='flag-5'>互斥</b><b class='flag-5'>鎖</b>

    Linux互斥的作用 互斥是什么

    。如果釋放互斥時有一個以上的線程阻塞,那么這些阻塞的線程會被喚醒,它們都會嘗試對互斥進行加鎖,當有一個線程成功對互斥鎖上鎖之后,其它線程
    的頭像 發表于 07-21 11:13 ?951次閱讀

    自旋互斥的區別有哪些

    自旋 自旋互斥很相似,在訪問共享資源之前對自旋進行上鎖,在訪問完成后釋放自旋(解鎖)
    的頭像 發表于 07-21 11:19 ?9507次閱讀

    互斥、條件變量、讀寫、自旋及信號量介紹

    一、互斥(同步) 在多任務操作系統中,同時運行的多個任務可能都需要使用同一種資源。這個過程有點類似于,公司部門里,我在使用著打印機打印東西的同時(還沒有打印完),別人剛好也在此刻使用打印機打印東西
    的頭像 發表于 11-10 16:16 ?2410次閱讀
    <b class='flag-5'>互斥</b><b class='flag-5'>鎖</b>、條件變量、讀寫<b class='flag-5'>鎖</b>、自旋<b class='flag-5'>鎖</b>及信號量介紹

    互斥和自旋的區別 自旋臨界區可以被中斷嗎?

    互斥和自旋的區別 自旋臨界區可以被中斷嗎? 互斥
    的頭像 發表于 11-22 17:41 ?849次閱讀

    自旋互斥的使用場景是什么

    自旋互斥是兩種常見的同步機制,它們在多線程編程中被廣泛使用。在本文中,我們將介紹自旋互斥
    的頭像 發表于 07-10 10:05 ?1021次閱讀

    互斥和自旋的實現原理

    互斥和自旋是操作系統中常用的同步機制,用于控制對共享資源的訪問,以避免多個線程或進程同時訪問同一資源,從而引發數據不一致或競爭條件等問題。 互斥
    的頭像 發表于 07-10 10:07 ?503次閱讀
    主站蜘蛛池模板: 日本在线一本| 欧美视频精品在线| 四虎影院永久免费观看| 亚洲欧美人成网站综合在线| 在线天堂网www资源种子| 怡红院精品视频| 天天噜噜色| 亚洲黄网免费| 欧美高清老少配性啪啪| 日本美女黄网站| 黄色成人免费网站| 视频网站在线| 国产精品视频久久久| a级男女性高爱潮高清试| 久久xx| 亚洲精品一卡2卡3卡三卡四卡| 美女张开腿露尿口给男人亲| 97爱sese| 美女把尿口扒开让男人桶出水| 中文天堂最新版www| 特级一级毛片视频免费观看| 欧美天堂在线视频| 国产日韩精品一区二区三区| 免费观看的黄色网址| 黄色福利网| 国产永久视频夜色资源网| 欧美三级免费看| 国产欧美视频在线| 天天干夜夜添| 天天爱天天干天天| 国产精品成人一区二区| 亚洲视频四区| 午夜啪啪福利视频| 性欧美护士18xxxxhd视频| 伊人久久综合成人亚洲| 手机在线精品视频| 韩国三级视频| 唐人呦一呦xxxx视频| 免费观看视频网站| 亚洲国产成+人+综合| 天天摸日日添狠狠添婷婷|