有什么语义含义:volatile-mutable与:unynchronized-mutable?

kon*_*onr 6 clojure mutability

当我注意到一个可变字段用^:unsynchronized-mutable注释时,我正在研究一个clojure lib .Mutable是可变的,但我不知道未同步的部分意味着什么,所以我读了文档,其中包含:

请注意,可变字段非常难以正确使用,并且只是为了便于在Clojure本身中构建更高级别的构造,例如Clojure的引用类型.它们仅供专家使用 - 如果:volatile-mutable或:unynchronized-mutable的语义和含义对您来说不是很明显,那么您就不应该使用它们.

我无法得到细微差别:它是否说在实践中我选择哪个可变性注释无关紧要,或者人们应该忘记完全使用可变类型?

并且,为了好奇,在较低的抽象层次中,它们之间的语义差异是什么?

谢谢!

ama*_*loy 3

嗯,这并不是说“人们”应该忘记使用可变类型。这意味着任何使用它们的人都应该知道不同步和易失性之间的区别(并且暗示这不是 Clojure 特定的问题,否则它将在文档字符串中进行解释)。我不知道一个明确的解释,但在使用 Clojure 的可变 deftype 字段之前,您应该了解 java 内存模型,以及一般的线程和同步。

我手头没有明确的参考资料,但维基百科似乎有一篇关于该主题的有用文章(注意我刚刚发现它,并且只是浏览了一下)。