嗨,大家好:在Clojure的「原子」的文件指出 -比賽條件和Clojure的原子
"Changes to atoms are always free of race conditions."
However-競爭條件僅僅是在變化的定義的不是,而是在上下文並行邏輯操作在不同的線程中。
我在想 - 保證的意義是什麼「原子變化總是沒有競爭條件」?在Java中,我們有原子基元,其支持某些線程安全的操作,這些操作是具體的(例如的AtomicInteger支持「getAndIncrement」操作)。但Clojure的原子類型無關,例如,我們可以調用:
(atom "Hi im a string") Or
(atom (.getClass Object))
原子方法的靈活性意味着Clojure的,發動機罩下,不爲「智能」地提供類型特異性原子/線程安全對原子的操作。
因此,我會問 - 究竟是什麼原子的方法「做」到我們的對象
*「這些功能保證順序執行的」 * - 這是不完全的'atom'保證什麼。實際擔保是'交換af'記得了''的價值,把它傳遞給'F'如果了''的後F''值完成還是等於舊值,然後它被取代f'的結果。在此期間,許多其他功能可以應用於'a',只要它們的效果相互抵消即可。 – 2012-03-12 15:04:08
@Rafal - 非常感謝,我已經更新了答案,以便更精確一些。 – mikera 2012-03-12 15:53:38
@myself:基礎比較實際上是Java的==(對象標識),所以不是「相等」我應該寫「相同」和,而不是「相互抵消」 - >「離開原子引用相同的對象」 。 – 2012-03-12 16:58:39