Clojure - Atomi

Atomssono un tipo di dati in Clojure che fornisce un modo per gestire lo stato condiviso, sincrono e indipendente. Un atomo è proprio come qualsiasi tipo di riferimento in qualsiasi altro linguaggio di programmazione. L'uso principale di un atomo è quello di contenere le strutture dati immutabili di Clojure. Il valore detenuto da un atomo viene modificato con ilswap! method.

Internamente, scambia! legge il valore corrente, gli applica la funzione e tenta di confrontarlo e impostarlo. Poiché un altro thread potrebbe aver modificato il valore nel tempo intercorso, potrebbe essere necessario riprovare e lo fa in un ciclo di rotazione. L'effetto netto è che il valore sarà sempre il risultato dell'applicazione della funzione fornita a un valore corrente, atomicamente.

Esempio

Gli atomi vengono creati con l'aiuto del metodo atom. Un esempio sullo stesso è mostrato nel seguente programma.

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

Produzione

Il programma precedente produce il seguente risultato.

1

Si accede al valore di atom utilizzando il simbolo @. Clojure ha alcune operazioni che possono essere eseguite sugli atomi. Di seguito sono riportate le operazioni.

Sr.No. Operazioni e descrizione
1 Ripristina!

Imposta il valore di atom su un nuovo valore senza considerare il valore corrente.

2 confronta e imposta!

Atomicamente imposta il valore di atom al nuovo valore se e solo se il valore corrente dell'atomo è identico al vecchio valore detenuto dall'atomo. Restituisce true se viene impostato, altrimenti restituisce false.

3 scambiare!

Sostituisce atomicamente il valore dell'atomo con uno nuovo basato su una particolare funzione.