Clojure - 原子



原子是 Clojure 中一種資料型別,提供了一種管理共享、同步、獨立狀態的方式。原子就像任何其他程式語言中的任何引用型別一樣。原子的主要用途是儲存 Clojure 的不可變資料結構。原子儲存的值使用swap! 方法更改。

在內部,swap! 讀取當前值,將函式應用於它,並嘗試對其進行比較並設定。由於另一個執行緒可能在間隔時間內更改了該值,因此它可能需要重試,並且在自旋迴圈中這樣做。最終效果是,該值將始終是將提供的函式應用於當前值的原子結果。

示例

原子是在 atom 方法的幫助下建立的。以下程式顯示了一個示例。

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

輸出

上述程式產生以下結果。

1

使用 @ 符號訪問原子的值。Clojure 有幾個可以在原子上執行的操作。以下是這些操作。

序號 操作和描述
1 reset!

將原子的值設定為新值,而不管當前值是什麼。

2 compare-and-set!

當且僅當原子的當前值與原子儲存的舊值相同,才將原子的值原子地設定為新值。如果設定成功,則返回 true,否則返回 false。

3 swap!

基於特定函式,原子地將原子的值與新值交換。

廣告

© . All rights reserved.