1、信號量用于控制對共享資源的訪問
舉一個很常見的例子,某個停車場有100個停車位,這 100 個停車位大家都可以用,對于大家來說這 100 個停車位就是共享資源。假設現在這個停車場正常運行,你要把車停到這個這個停車場肯定要先看一下現在停了多少車了?還有沒有停車位?當前停車數量就是一個信號量,具體的停車數量就是這個信號量值,當這個值到 100 的時候說明停車場滿了。停車場滿的時你可以等一會看看有沒有其他的車開出停車場,當有車開出停車場的時候停車數量就會減一,也就是說信號量減一,此時你就可以把車停進去了,你把車停進去以后停車數量就會加一,也就是信號量加一。這就是一個典型的使用信號量進行共享資源管理的案例,在這個案例中使用的就是計數型信號量。
再看另外一個案例:使用公共電話,我們知道一次只能一個人使用電話,這個時候公共電話就只可能有兩個狀態:使用或未使用,如果用電話的這兩個狀態作為信號量的話,那么這個就是二值信號量。
信號量用于控制共享資源訪問的場景相當于一個上鎖機制,代碼只有獲得了這個鎖的鑰匙才能夠執行。
2、信號量的用于任務同步
任務與任務或中斷與任務之間的同步。
在執行中斷服務函數的時候可以通過向任務發送信號量來通知任務它所期待的事件發生了,當退出中斷服務函數以后在任務調度器的調度下同步的任務就會執行。
在編寫中斷服務函數的時候我們都知道一定要快進快出,中斷服務函數里面不能放太多的代碼,否則的話會影響的中斷的實時性。裸機編寫中斷服務函數的時候一般都只是在中斷服務函數中打個標記,然后在其他的地方根據標記來做具體的處理過程。在使用 RTOS 系統的時候我們就可以借助信號量完成此功能,當中斷發生的時候就釋放信號量,中斷服務函數不做具體的處理。具體的處理過程做成一個任務,這個任務會獲取信號量,如果獲取到信號量就說明中斷發生了,那么就開始完成相應的處理,這樣做的好處就是中斷執行時間非常短。
-
嵌入式
+關注
關注
5092文章
19177瀏覽量
307657 -
信號
+關注
關注
11文章
2804瀏覽量
77100 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62395
發布評論請先 登錄
相關推薦
評論