【发布时间】:2012-03-12 01:20:01
【问题描述】:
clojure“原子”的文档指出 -
"Changes to atoms are always free of race conditions."
然而,竞态条件的定义不仅仅是根据变化,而是在不同线程中并行逻辑操作的上下文中定义。
我想知道 - “对原子的更改总是不受竞争条件的影响”的保证有什么意义?在 java 中,我们有原子原语,它支持某些特定的线程安全操作(例如,AtomicInteger 支持“getAndIncrement”操作)。但是 Clojure 原子与类型无关,例如,我们可以调用:
(atom "Hi im a string") Or
(atom (.getClass Object))
atom 方法的灵活性意味着 Clojure 在底层并不“聪明”地为 atom 提供特定于类型的原子/线程安全操作。
因此,我会问 - atom 方法究竟对我们的对象“做什么”(即它只是简单地同步整个对象吗?)
【问题讨论】:
标签: java multithreading clojure atomic