2016-01-28 47 views
0

任何人都可以告訴我什麼是計數信號量? 計算信號量的優勢是什麼? 你可以在c中寫一個計數信號量的代碼片段嗎?計數信號量的優勢

+0

你試過Google搜索「計數信號量」嗎? – scottysmalls

+0

是的,我嘗試了很多,但沒有得到實時問題計數信號量的確切好處。因爲讓所有線程訪問共享資源都可能導致損壞。 –

回答

0

在你有N個可用資源計數信號量可以保持剩餘資源的數量的軌道 案件。當任何線程訪問信號量計數器 中的一個時,計數器會減1,當線程釋放信號量時,計數器將增加1。 如果計數器達到零並且一個線程要求資源線程將被阻塞 直到另一個線程釋放信號量。 信號量的一個衆所周知的應用是生產者 - 消費者。 你可以在這裏找到一個很好的生產者消費者問題描述:https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem 它還包括你尋找的簡單代碼。

信號量也可被初始化,以限制它控制資源的最大數量。 如果我們限制爲1,這個被稱爲它只有兩種狀態SEMA = 1或SEMA = 0 二進制和計數信號在這裏比較二進制信號: Differnce between Counting and Binary Semaphores

0

計數信號量大約一樣強大的條件變量(與互斥體一起使用)。在許多情況下,使用計數信號量而不是條件變量來實現代碼可能會更簡單(如下幾個示例所示)。

從概念上講,信號量是非負整數。信號量通常用於協調對資源的訪問,並將信號計數初始化爲可用資源的數量。線程然後在添加資源時以原子方式遞增計數,並在資源被移除時以原子方式遞減計數。

當信號量計數變爲零,這表明沒有更多的資源存在時,線程試圖減小信號塊等待直到計數變爲大於零。

參考this link例如。