3
爲什麼我們用等待隊列在Linux內核中,而不是使用信號燈同步?使用等待隊列和信號量進行同步有什麼區別?等待隊列VS信號量在linux
爲什麼我們用等待隊列在Linux內核中,而不是使用信號燈同步?使用等待隊列和信號量進行同步有什麼區別?等待隊列VS信號量在linux
信號量是可變的或抽象的數據類型,它提供了用於控制由多個進程訪問公共資源在並行編程環境的簡單,但有用的抽象。 (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
};
是否意味着waitqueues可代替信號燈來實現?當waitqueue比信號量更受歡迎時,是否還有任何insta? – shinymetal
@sanrioalvares請重新閱讀的答案。當你使用等待隊列時,爲了確保沒有資源衝突,你已經實現了一個信號量(這是控制對一個公共資源的訪問的東西)。等待隊列包含在信號量中。 –