こんにちはみんな: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'が保証するものではありません。実際の保証は、 'swap af'が' a'の値を記憶して 'f'に渡し、' f'の後の 'a'の値がまだ古い値と等しい場合、それは'f'の結果です。それらの効果が互いに打ち消しあう限り、多くの他の関数を 'a'に適用することができます。 –
@Rafal - ありがとう、私はもう少し正確に答えを更新しました。 – mikera
@myself:基本的な比較は、実際にはJavaの==(オブジェクトID)なので、 "等しい"の代わりに、 "同一のオブジェクト"を参照するアトムを残して、 。 –