2012-08-04 142 views
6

似乎是一個矛盾,因爲信號量應阻止功能。什麼是非阻塞信號量?

互聯網搜索沒有顯示任何有用的定義這意味着什麼。

+0

也許他們指的是像自旋鎖那樣依賴於使用代碼來阻止或明確切換到另一個任務?你在哪裏遇到這個詞? – 2012-08-04 00:37:40

回答

7

如果一個信號量的值爲0,那麼它的一個關閉操作將被阻塞,直到有人釋放資源並增加信號量。

如果資源不可用,而非產生錯誤,則非阻塞信號不會阻止關閉操作。如果程序立即需要該資源或不暫停執行,並且如果資源不可用,程序邏輯可以採取其他措施,這可能很有用。

5

非阻塞信號通常是指信號量,它允許您嘗試獲取而不會阻塞。如果信號量不能被「鎖定」,那麼它將會失敗,但不會被阻止。如果它可以被鎖定,它將鎖定它並返回true(它被鎖定)。

1

例如,關聯的等待操作WaitForSingleObject()允許指定超時值dwMilliseconds。如果此參數設置爲0,則調用的結果將始終立即返回。這樣信號量的狀態可以不受阻塞地進行測試。