Clojure Atoms

2018-12-24 11:42 更新

Atoms是Clojure中的一種數(shù)據(jù)類型,它提供了一種管理共享,同步,獨(dú)立狀態(tài)的方法。 Atoms就像任何其他編程語言中的任何引用類型。 Atoms的主要用途是保存Clojure的不可變數(shù)據(jù)結(jié)構(gòu)。 Atoms保持的值隨swap! 方法改變而改變。

內(nèi)部,swap!讀取當(dāng)前值,對(duì)其應(yīng)用函數(shù),并嘗試對(duì)其進(jìn)行比較和設(shè)置。由于另一個(gè)線程可能在中間時(shí)間中更改了值,因此可能必須重試,并在自旋循環(huán)中執(zhí)行。 凈效果是該值將始終是將所提供的函數(shù)應(yīng)用于當(dāng)前值的Atoms結(jié)果。

Atoms是在atom方法的幫助下創(chuàng)建的。 以下程序中顯示了相同的示例。

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

輸出

以上示例輸出以下結(jié)果:

1

atom的值通過使用@符號(hào)訪問。 Clojure有一些可以對(duì)原子執(zhí)行的操作。 以下是操作。

S.No.方法和說明
reset!將atom的值設(shè)置為新值,而不考慮當(dāng)前值。
compare-and-set!當(dāng)且僅當(dāng)原子的當(dāng)前值與原子保持的舊值相同時(shí),以原子方式將atom的值設(shè)置為新值。 返回true如果設(shè)置發(fā)生,否則返回false。
swap!根據(jù)特定的函數(shù),用一個(gè)新的Atoms交換原值。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)