Clojure - Atom 原子

Atom 原子是 Clojure 中的一种数据类型,它提供了一种管理共享、同步、独立状态的方法。 原子就像任何其他编程语言中的任何引用类型一样。 原子的主要用途是保存 Clojure 的不可变数据结构。 原子所持有的值会随着交换而改变! 方法

在内部,交换! 读取当前值,将函数应用于它,并尝试比较并设置它。由于另一个线程可能在干预时间内更改了该值,因此它可能必须重试,并在自旋循环中执行此操作。 最终效果是该值始终是所提供的函数原子地应用到当前值的结果。

示例

原子是在atom方法的帮助下创建的。 以下程序显示了相同的示例。

(ns clojure.examples.example
   (:gen-class))
(defn example []
   (def myatom (atom 1))
   (println @myatom))
(example)

输出

上面的程序产生以下结果。

1

使用@符号访问atom的值。 Clojure 有一些可以对原子执行的操作。 以下是操作。

序号 操作及说明
1 reset!

将atom的值设置为新值,而不考虑当前值。

2 compare-and-set!

当且仅当原子的当前值与原子持有的旧值相同时,才以原子方式将原子的值设置为新值。 如果设置发生则返回 true,否则返回 false。

3 swap!

基于特定函数以原子方式将原子值与新原子值交换。