2012-10-29 172 views

回答

4

信號量是可變的或抽象的數據類型,它提供了用於控制由多個進程訪問公共資源在並行編程環境的簡單,但有用的抽象。 (Wikipedia

現在,信號量更是一個概念,而不是一個具體的實現。

linux 信號量數據結構實現使用等待隊列。如果沒有一個等待隊列,你不會不知道哪個進程要求的第一資源,這可能會導致非常大的等待時間對於一些。等待隊列確保公平,和消退的資源匱乏問題。

struct semaphore { 
    int count; //+ve or -ve indicates resource free/busy state 
    int waking; //number of waiting processes 
    int lock ; /* to make waking testing atomic */ 
    struct wait_queue *wait; //queued, to prevent starvation, ensure fairness 
}; 

Reference

+0

是否意味着waitqueues可代替信號燈來實現?當waitqueue比信號量更受歡迎時,是否還有任何insta? – shinymetal

+0

@sanrioalvares請重新閱讀的答案。當你使用等待隊列時,爲了確保沒有資源衝突,你已經實現了一個信號量(這是控制對一個公共資源的訪問的東西)。等待隊列包含在信號量中。 –