UCOS學習筆記——信號量

      網友投稿 1201 2022-05-29

      信號量

      信號量的基本概念

      信號量(Semaphore)是一種實現

      任務間通信的機制

      ,可以實現任務之間同步或臨界資源的互斥訪問。

      信號量是一個“鎖定機構”, 代碼需要獲得鑰匙才可以訪問共享資源。 占用該資源的任務不再使用該資源并釋放資源時, 其它任務才能夠訪問這個資源 。

      抽象的來講信號量是一個非負整數,所有獲取它的任務都會將該整數減一其值的含義分兩種情況:

      0:表示沒有積累下來的釋放信號量操作,且有可能有在此信號量上阻塞的任務。

      正值:表示有一個或多個釋放信號量操作。

      信號量的類型

      通常有兩種類型的信號量:

      二值信號量和多值信號量

      。二值信號量的值只能是 0 或 1.多值信號量計數值可以是 0 到 4294967295(依賴于計數值是 8 位, 16 位或 32 位)。特別的, uC/OS-III 中的信號量計數值最大為 OS_SEM_CTR(見 OS_TYPE.H)。根據信號量計數值,uC/OS-III 可以知道有該信號量可以再被多少個任務獲得。

      二值信號量

      二值信號量既可以用于臨界資源訪問也可以用于同步功能。

      用作同步時,信號量在創建后應被置為空,任務1獲取信號量而進入阻塞,任務2在某種條件發生后,釋放信號量,于是任務1獲得信號量得以進入就緒態,如果任務1的優先級是最高的,那么就會立即切換任務,從而達到了兩個任務間的同步。同樣的,在中斷服務函數中釋放信號量,任務1也會得到信號量,從而達到任務與中斷間的同步。

      計數信號量

      常將計數信號量用于事件計數與資源管理。

      每當某個事件發生時,任務或者中斷將釋放一個信號量(信號量計數值加1)

      ,當處理被事件時(一般在任務中處理),處理任務會取走該信號量(信號量計數值減1),信號量的計數值則表示還有多少個事件沒被處理。

      注意:只有任務才允許使用信號量,ISR是不允許的。

      UCOS學習筆記——信號量

      信號量應用場景及運作機制

      應用場景

      同步:任務與任務、中斷與任務間同步

      計數:用于資源統計,比如當前任務來了很多個消息,但是這些消息都放在緩沖區中,尚未處理,這時候就可以利用計數信號量對這些資源進行統計,每來一個消息就加一,每處理完一個消息就減一,這樣子系統就知道有多少資源未處理的

      運行機制

      二值信號量運行機制:

      計數信號量運行機制:

      與信號量相關的API函數

      當信號量被用于共享資源時,信號量相關函數只能被任務調用(絕不能被 ISR 調用)。但將信號量用于標記任務時可以被 ISR 調用

      簡單介紹:

      OSSemCreate()創建一個信號量,將信號量地址傳遞給函數的第一個參數。信號量必須在創建后才能被其他任務使用

      用OSSemPend()函數等待一個信號量。 任務必須指定所等待的信號量,且這個信號量之前已經被創建 。據信號量的創建結果 OSSemPend()返回一個錯誤代號。如果信號量創建成功, 錯誤代號為 OS_ERR_NONE。 如果創建失敗,錯誤代號會包含錯誤的原因。 當 OSSemPend()正確返回時,任務就可以訪問這個共享資源。

      資源訪問結束后, 任務調用 OSSemPost()釋放這個信號量。 當信號量有效的時候,任務才能獲取信號量,當任務獲取了某個信號量的時候,該信號量的可用個數就減下,當它減到0的時候,任務就無法再獲取了,并且獲取的任務會進入阻塞態

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Java 關鍵字總結
      下一篇:kkfileview文件預覽服務
      相關文章
      亚洲综合色区中文字幕| 亚洲国产情侣一区二区三区| 一本色道久久88亚洲精品综合| 亚洲码在线中文在线观看| 久久精品亚洲日本佐佐木明希| 国产亚洲一区二区三区在线观看| 亚洲国产综合人成综合网站| 国产亚洲精品91| 亚洲国产精品自产在线播放| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲综合一区二区三区四区五区| 中文字幕亚洲综合小综合在线| 亚洲综合伊人制服丝袜美腿| 国产精品亚洲片夜色在线| 亚洲国产成人久久精品app | 亚洲精品第一国产综合精品99| 色偷偷亚洲第一综合网| 亚洲?v无码国产在丝袜线观看| 亚洲成?v人片天堂网无码| 在线观看亚洲电影| 亚洲国产精品不卡毛片a在线| 亚洲国产日韩成人综合天堂 | 亚洲精品456播放| 久久亚洲国产成人影院网站| 亚洲精品狼友在线播放| 亚洲av色影在线| 亚洲美女aⅴ久久久91| 亚洲成AV人综合在线观看| 亚洲AV成人一区二区三区在线看| 亚洲中文字幕无码久久2020| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲国产精品无码久久九九| 国产成人精品日本亚洲专区61 | 久久精品国产99国产精品亚洲| 亚洲人成www在线播放| 337p日本欧洲亚洲大胆人人| 亚洲精品美女久久久久99小说| 亚洲熟妇av一区二区三区漫画| 亚洲AV日韩AV永久无码绿巨人| 666精品国产精品亚洲| 亚洲1234区乱码|