工具類Semaphore的實現分析

2021-09-24 22:25:07 字數 836 閱讀 7030

說起semaphor分析,停車場的例子都給說爛了,現在以技師服務為例進行分析,希望能給大家帶來更深刻的理解。

乙個團隊的技師資源是有限的,所以客人爆滿時要進行限制。對於有限的資源要進行限流、控制,高效的提高技師工作效率,這就是semaphore的應用場景。

具體實現流程如下圖:

semaphore基於abstractqueuedsynchronizer模板實現公平限流模式、非公平限流模式,以aqs的state為管理員來實現資源控制,包括state的初始化、增加、減少。具體實現步驟如下:

初始化資源資料,比如state=100

客人提供(預設不公平)申請技師個數,管理員state進行把門,檢視是否可用數〉申請數。

如果可用數〉=申請數

管理員分配permit,客人申請成功,技師開始工作…

客人爽完後歸還permit給管理員,申請流程結束。

如果可用數<申請數

公平申請客人則去門口的申請隊伍末尾排隊。等排到第乙個時才能提出申請並拿到permit。

不公平申請客人則無需排隊,不停的集體提出permit申請,誰手快誰能搶到permit。

搶到permit的客人,管理員分配permit,客人申請成功,技師開始工作…

客人洗完腳後歸還permit給管理員,申請流程結束。

Semaphore許可訪問類

乙個計數訊號量。從概念上講,訊號量維護了乙個許可集。如有必要,在許可可用前會阻塞每乙個 acquire 然後再獲取該許可。每個 release 新增乙個許可,從而可能釋放乙個正在阻塞的獲取者。但是,不使用實際的許可物件,semaphore 只對可用許可的號碼進行計數,並採取相應的行動。拿到訊號量的執...

實現乙個Semaphore

其實這是我boss的想法,我一開始聽他這麼說也覺得比較差異,ms已經寫好了何必再自己寫乙個.答案有兩個 1ms寫的東西未必就是最好的,如完成埠,heap等.2semaphore是多執行緒程式設計中的核心元素所以有必要提速.我們都知道在多執行緒中ms提供的多個現成阻塞核心物件中critical mon...

執行緒流量控制工具之Semaphore

簡介semaphore 訊號量 是用來控制同時訪問特定資源的執行緒數量,它通過協調各個執行緒,以保證合理的使用公共資源。很多年以來,我都覺得從字面上很難理解semaphore所表達的含義,只能把它比作是控制流量的紅綠燈,比如xx馬路要限制流量,只允許同時有一百輛車在這條路上行使,其他的都必須在路口等...