Clojure - Atomy

Atomsto typ danych w Clojure, który umożliwia zarządzanie współdzielonym, synchronicznym, niezależnym stanem. Atom jest taki sam, jak każdy typ referencyjny w każdym innym języku programowania. Podstawowym zastosowaniem atomu jest przechowywanie niezmiennych struktur danych Clojure. Wartość posiadana przez atom zmienia się za pomocąswap! method.

Wewnętrznie zamień! odczytuje bieżącą wartość, stosuje do niej funkcję i próbuje ją porównać i ustawić. Ponieważ inny wątek mógł zmienić wartość w międzyczasie, może być zmuszony do ponownej próby i robi to w pętli spinowej. Efektem netto jest to, że wartość zawsze będzie wynikiem zastosowania dostarczonej funkcji do wartości bieżącej, atomowo.

Przykład

Atomy tworzone są za pomocą metody atomowej. Przykład tego samego pokazano w poniższym programie.

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

Wynik

Powyższy program daje następujący wynik.

1

Dostęp do wartości atomu uzyskuje się za pomocą symbolu @. Clojure ma kilka operacji, które można wykonać na atomach. Oto operacje.

Sr.No. Operacje i opis
1 Resetowanie!

Ustawia wartość atom na nową wartość bez względu na bieżącą wartość.

2 porównaj i ustaw!

Atomowo ustawia wartość atom na nową wartość wtedy i tylko wtedy, gdy aktualna wartość atomu jest identyczna ze starą wartością posiadaną przez atom. Zwraca true, jeśli dzieje się set, w przeciwnym razie zwraca false.

3 zamiana!

Atomowo zamienia wartość atomu na nową na podstawie określonej funkcji.