執行緒中的Semaphore理解

2021-08-26 05:05:40 字數 826 閱讀 8252

乙個semaphore(訊號量)就像乙個***一樣:它有乙個特定的capacity(容量),被乙個保鏢強制限制。一旦它滿了,沒有人能再進去,然後就在外面形成了乙個等待的queue(佇列)。接著,乙個人離開,queue的首部的那個人進入。這種constructor(構造器)需要至少兩個引數:***中目前可用的位置和***的capacity。

乙個帶著capacity的semaphore類似於乙個mutex(互斥量)或者lock(鎖),只是semaphore沒有「擁有者」,換言之,它是thread(執行緒)不可知的。任何乙個thread可以基於semaphore呼叫釋放,而基於mutex和lock,只有包含了lock的thread才可以釋放它。

有兩個功能相似的類:semaphore和semaphoreslim。後者在framework4.0中有介紹並且被優化,達到並行程式中的low-latency(低延時)要求。它在傳統的多執行緒中也很有用,因為它可以讓你在等待的時候指定乙個取消記號。然而,它不能用於程序間的訊號傳送。

semaphore在呼叫waitone或者release時需要1微妙;semaphoreslim只需要四分之一微秒。

semaphore在限制併發性中很有用——防止太多的thread一起執行乙個特定的**段。在下面的例子當中,5個thread試圖進入***但是植被允許一次進入三個:

如果那個sleep語句被代替執行集中的硬碟i/o(讀寫),semaphore將通過限制過多並行的硬碟驅動處理活動改善執行效率。

乙個semaphore,一旦命名,則可以和乙個mutex一樣跨越程序。

執行緒中的Semaphore理解

乙個semaphore 訊號量 就像乙個 一樣 它有乙個特定的capacity 容量 被乙個保鏢強制限制。一旦它滿了,沒有人能再進去,然後就在外面形成了乙個等待的queue 佇列 接著,乙個人離開,queue的首部的那個人進入。這種constructor 構造器 需要至少兩個引數 中目前可用的位置和...

執行緒中的Semaphore理解

乙個semaphore 訊號量 就像乙個 一樣 它有乙個特定的capacity 容量 被乙個保鏢強制限制。一旦它滿了,沒有人能再進去,然後就在外面形成了乙個等待的queue 佇列 接著,乙個人離開,queue的首部的那個人進入。這種constructor 構造器 需要至少兩個引數 中目前可用的位置和...

執行緒Semaphore的簡單例項

include include include include struct job struct job job queue pthread mutex t job queue mutex pthread mutex initializer sem t job queue count void i...