訊號量是什麼?可以這樣簡單的理解
老羊快跑微信公眾號
內有老羊的《200分鐘PCB設計傻瓜教程》,免費觀看
大家都知道,計算機有了作業系統後效能大幅度提升,其根本原因就在於實現了程序的併發執行。多個併發的程序彼此之間圍繞著緊俏的資源產生了兩種關係,同步或互斥。而訊號量正式解決資源競爭的最有效途徑。
比如記錄資源的數量,等待資源的程序數,等待資源的程序阻塞佇列在哪,當然最重要的是訊號量還代表這個資源是互斥的。比如訊號量S=3代表資源目前還有3個,沒有程序阻塞;S=-2代表資源已經都被佔用,且阻塞佇列中等待資源的程序有2個。
訊號量是作業系統提供給使用者使用的一種機制,幫助使用者程序協調使用資源,使用者程式設計的時候可以直接呼叫,不必自己設計。
例:若有一售票廳只能容納300人,當少於300人時,可以進入;否則,需在外等候。若將每一個購票者作為一個程序,請用P(wait)、V(signal)操作程式設計,並寫出訊號量的初值。(強調:只有一個購票視窗,每次只能為一位購票者服務)
分析:題中有兩類資源,售票廳和售票視窗,售票廳可以容納300人,視窗只能服務1個人。使用者到達後要想買到票,首先要進入售票廳,然後申請到窗口才行。因此使用者需要獲得兩類資源才能成功購票。好了,我們定義兩個訊號量一個是S1,代表售票廳還能容納的人數,一個是S2,代表視窗,它們的初始值一個是
解:semophore S1=330,S2=1;
使用者程序Pi {
Wait(S1)
進入大廳
Wait(S2)
視窗購票
退出購票視窗
Signal(S2)
退出大廳
Signal(S1)
}
注意,申請的時候能不能把S1,S2的順序調換呢?答案是不能的,因為如果某程序申請到了視窗(被叫號了),卻無法進入大廳,那麼其他人就無法購票,也就無法退出大廳,他也就一直進不去了。另外在釋放過程中,能不能把siganl(S2)放在程式的最後呢,答案是可以的,但是多程序併發時,資源釋放的太晚是不是會影響計算機的效率呢。
老羊快跑:一個關注作業系統教學、嵌入式開發、科技資訊的公眾號