通常所說的信號量......它們是否涉及到忙碌的等待?我對這個術語感到困惑。請告訴我,我能夠畫出的哪些結論是真實的。 a)Spinlocks涉及繁忙的等待,所以爲了避免這種情況,我們有信號量。
b)信號量是一種自旋鎖,但我們可以沒有繁忙的等待信號量
c)pthread_condition變量與信號量做同樣的事情嗎?如果是這樣,它們是否等同於semaphore.h庫中的信號量。如果兩者都代表相同的功能,我很困惑。
信號量術語
信號量術語
回答
抽象地說,信號量是一個帶有許多許可證的鎖。信號燈支持兩種操作:
- 截至,增加許可的數量,並且
- 下,它試圖減少許可證的數量。如果沒有足夠的許可證,則該操作等待,直到有足夠的許可證可用。
實現信號量有很多方法。但是,通常情況下,信號量不是作爲自旋鎖實現的,而是實際上讓操作系統阻塞線程並讓它休眠直到請求的許可證可用。也就是說,一個完全合法的信號量實現可能會讓它忙碌 - 等待;我只是沒有意識到任何這樣做的實現。
條件變量表示不同的概念。通常,信號燈旨在管理只有這麼多副本的資源。希望資源的每個線程都會等待,直到信號守護對它的訪問變得可用,並且每個使用資源的線程都擁有一個許可。條件變量通常用於允許線程等待某些事件發生。他們通常支持業務
- 等待,這阻止線程,直到它發出信號,
- 通知,它講述了一個線程等待條件變量,它可以繼續,並
- 通知 - 全部,它告訴等待條件變量的所有線程可以繼續。
條件變量和信號可以(通常)互換使用,並對鎖的使用設計進行適當的更改。但是,有時信號量更容易處理,有時條件變量更容易處理,所以我們都有可用的基元。通常情況下,由於您使用的特定庫或語言,您會選擇使用一種。例如,Java對象內置支持監視器(與鎖配對的條件變量),所以在Java中使用條件變量通常很有用,儘管Java信號量確實存在。如果您在Windows中進行編程,則信號量是首選的同步方法,但條件變量確實存在。
希望這會有所幫助!
自旋鎖使用繁忙的等待,因此名稱自旋 - 線程自旋無所事事。
它所做的是「?我可以去我可以去我可以進去......等」,直到鎖允許它在關鍵部分(CS)
信號燈:通常使用信號/通知和隊列來實現,因此當線程在信號量上進入睡眠狀態時,如果臨界區域中有另一個線程,則進入隊列。如果CS中沒有其他線程,則當前線程輸入它。當另一個線程在CS中時,所有其他線程在信號量上進入隊列。當第一個線程退出CS時,它會再次觸發信號量。信號量現在將其隊列中的第一個線程喚醒並喚醒它,從而使線程進入CS。
在signal/wait實現的信號量時,線程說我可以進去嗎?如果不是,它說,當我可以時叫醒我。如果是的話,它會在
編輯:信號燈VS條件
上條件的等待和信號操作是非常相似的P和V操作上計數信號。等待語句可以阻塞線程的執行,而信號語句可以導致重新啓動另一個線程。但是,它們之間存在差異。 P操作不一定會阻塞一個線程,因爲信號量計數器可能大於零。然而,等待語句總是阻塞一個線程。信號語句可以在一個條件下準備好(解除阻塞)阻塞的線程,就像V操作爲信號量上的阻塞線程做好準備一樣。區別在於V操作總是增加信號量計數器;從而影響後續的P操作。空條件下的信號語句不會影響後續的等待語句,因此會丟失。另一個區別是,如果執行足夠的V操作,信號量上被阻塞的多個線程可以立即恢復執行。在互斥類型的情況下,多個信號語句可以解鎖多個線程,但由於互斥類型的互斥屬性,只能有一個線程能夠執行。
請解釋與cond vars的對比 – 2012-02-06 03:56:44
- 1. java信號量習語
- 2. 理解C語言中的信號量
- 3. 如何在父進程中捕捉術語動作信號?
- 4. Perl術語:: ReadLine :: Gnu信號處理難點
- 5. 獲取術語名稱的術語編號
- 6. Lucene 5.3術語向量
- 7. Solr中的術語向量
- 8. Ruby信號量?
- 9. 超聲iphone(Shopkick信號技術)
- 10. Python中的DC術語FFT - 常量術語的幅度
- 11. 是否可以直接修改術語頻率/術語向量?
- 12. C - 多信號叉與信號量
- 13. Linux信號量:自旋鎖或信號?
- 14. 選擇與術語編號的郵政
- 15. 重置信號量
- 16. 實現信號量
- 17. 再入信號量
- 18. 信號量計數
- 19. 可調信號量
- 20. pthread_cond_wait與信號量
- 21. fortran的信號量
- 22. 實現信號量
- 23. Shell/C信號量
- 24. C信號量值
- 25. 信號量與互斥量
- 26. C中設置的信號量的最大信號量數
- 27. 信號量和R/W信號量之間的性能評估
- 28. Python:構建可重入信號量(結合RLock和信號量)
- 29. 使用二進制信號量作爲計數信號量
- 30. 術語
是的,所以我想知道如果你能給我的例子,以對比我可以使用它們 – 2012-02-06 03:58:13
加上這個..我認爲你的解釋幫助。 http://stackoverflow.com/questions/3513045/conditional-variable-vs-semaphore – 2012-02-06 04:02:49
POSIX符合性信號量不能等待,至少在實現支持優先級調度選項時不能等待,因爲這樣做會阻止低級別信號量的前進,優先級線程。 – 2012-02-06 04:33:19