2014-02-11 29 views
8

我可以想到當它無關緊要時的原因,以及1種情況,您可能不想使用它們,這是您想要測試非原子操作行爲的設計。何時不使用原子操作?

有什麼其他原因?具體來說,我正在研究一個具有一些罕見競爭條件的項目,因爲測試不使用原子增量。我想知道,爲什麼我不會總是使用原子增量,當它的函數已經存在?

謝謝!

+0

讓我把你的問題轉向你。如果你編寫程序的時候,工作人員可以作爲新的*進程*而不是新的*線程*衍生出來,那麼你不必擔心共享內存的原子更新,因爲進程不共享內存。所以不要問「爲什麼不總是使用原子操作?」不要問**爲什麼不總是使用進程而不是線程**? –

+0

有趣的一點,我認爲問題與爲什麼不使用原子相同,內存/速度等資源有限。 –

回答

6

因爲原子速度較慢。它們減慢了調用線程的速度,並且可能會減慢其他線程的速度,甚至有可能不會訪問相同的原子。它們也可能會阻止編譯器執行某些重新排序優化,否則它會執行。

+1

另外,當然......到處使用原子實際上並沒有做任何事情來提高線程的安全性(如果你因爲它而跳過正確的分析,可能會導致死鎖。 –

+0

@JamesKanze,atomics不一定是基於鎖的 – Leeor

+0

@Leeor雖然這是真的,但他們也不能保證不使用鎖定,並且還有其他方法來鎖定(或將所有活動線程放入busyloops中,而不是更有幫助)。程序的正確性是***全球性的財產。 –

1

原子操作有可能並且可能比它們的非原子等價物更昂貴。在不需要線程同步的情況下,例如更新非共享本地,atomiticy會增加不必要的開銷,應該避免。