FOS訊號量管理

2021-06-25 16:44:03 字數 581 閱讀 4564

一般的rtos會通過初始化訊號量建立相對應的阻塞鍊錶。這樣做會增加使用資源。

fos主要通過semaphore阻塞佇列管理訊號量。把被semaphore阻塞的任務掛在該鍊錶上。而且自始至終都使用一條鍊錶。fos在系統初始化時候需要初始化該鍊錶。

1、訊號量初始化

void sem_init(sem *semaphore, u8 *name, u32 num)

2、獲取訊號量

任務獲取訊號量,首先將該訊號量的值應該減1,然後判斷是否大於0,如果大於0,函式返回,否則把該任務插入semaphore阻塞佇列,並且從就緒佇列中刪除該任務,標誌該任務為不可以執行狀態。然後發生排程。

3.釋放訊號量

首先檢視是否有阻塞在此訊號量的任務,如果有,則該訊號量值加1,然後判斷是否大於0,如果大於0,就從就緒隊列表中新增該任務,並且從semaphore阻塞佇列中刪除該任務,然後發生排程;如果沒有任務阻塞在該訊號量上,那訊號量的值直接加1。

4、刪除訊號量

semaphore並沒有解決優先順序反轉的問題。它適用與兩個任務之間的同步,或是中斷同步任務,以及較長**段的保護。

download source code:

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...

訊號 訊號量

訊號是由 系統或者程序傳送給目標程序的資訊,以通知目標程序某個狀態的改變或系統異常。linux訊號可以由如下條件產生 1 對於前台程序,使用者可以通過輸入特殊的終端字元來給它傳送訊號。比如輸入ctrl c通常或給程序傳送乙個中斷訊號 2 系統異常。比如浮點異常和非法記憶體段訪問。3 系統狀態變化 4...