2011-06-04 50 views
1

任何人都可以解釋如何可以使用intrensic原子函數替代信號量?intrensic原子函數的使用,而不是信號燈

Recnetly我遇到了一個問題,由於規範的順序違反信號量使用,cpu停止。這個問題是通過使用intrensic原子函數來解決的,而不是獲取信號量來獲取對cpu全局內存的鎖定。

我沒有理解這個intrensic原子函數的用法來訪問cpu全局內存。

謝謝, Ivak。

回答

0

事實上,信號量依賴於原子函數(在大多數實現中) - 看看spinlocks - 這些就像是具有不同性能特徵的低級信號量。

但是,有時候臨界區保持操作非常簡單以至於它可以原子完成的情況 - 例如,增加一個計數器。還有更復雜的事情,比如將一個元素排入隊列中,這可以通過原子來完成(儘管不僅僅是單個操作)。

無論如何,使用信號量在某些情況下可能會導致死鎖,使用無鎖操作,您不會鎖定任何內容,因此您不能違反鎖定順序。

當然,原子操作不是萬能的,有些數據結構不能無鎖,有時候你需要在網絡上做一個複雜的操作,在這個過程中你必須被鎖定...信號仍然是必需的。

並且使用原子的bug代碼,即使最終沒有永久睡在信號量上的線程,也可以在循環中旋轉一個線程。