linux--訊號量
阿新 • • 發佈:2019-01-02
訊號量
什麼是訊號量?
訊號量是程序間通訊方式之一,用於實現程序間的同步與互斥。
同步與互斥
同步:保證對臨界資源訪問的時序可控性,兩個或兩個以上的程序或執行緒在執行過程中協同步調,按預定的先後次序執行.
比如只有超市進貨之後我才能去消費。
互斥:保證同一時間 對臨界資源訪問的唯一訪問性。當一個程序再對臨界資源進行操作時,其他的程序不能再操作該資源。
比如我在超市要買一包方便麵(方便麵已經在我手上),那麼其他人就不能夠買這包面。
顯然,同步是一種更為複雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個任務之間不可以同時執行,他們會相互排斥,必須等待一個執行緒執行完畢,另一個才能執行,而同步也是不能同時執行,但他是必須要安照某種次序來執行相應的執行緒(也是一種互斥)!因此互斥具有唯一性和排它性,但互斥並不限制任務的執行順序,即任務是無序的,而同步的任務之間則有順序關係。
訊號量的本質及基本功能
訊號量本質上是一個資源計數器。用於標記一個臨界資源是否有程序訪問。
程序在操作臨界資源之前先去檢視一下訊號量,如果訊號量為0(沒有資源),則阻塞等待。如果訊號量為1,則可以訪問資源。
獲取臨界資源就是對訊號量進行-1(剩餘為0)操作,退出臨界資源就是對訊號量進行+1(有剩餘資源)操作。
訊號量也是一個臨界資源
訊號量的訊號量作為程序間的通訊方式,意味著大家都能訪問到訊號量,不能有多個程序同時對訊號量進行加減操作,所以訊號量實際上也是一個臨界資源
對訊號量這個臨界資源操作是不會出現問題的,因為,訊號量的操作是一個原子操作.