2012-08-16 6 views
5

Questa è una domanda teorica motivata dal mio desiderio di comprendere meglio la concorrenza di Clojure.È necessario leggere più riferimenti Clojure in una transazione per coerenza?

Diciamo che sto scrivendo boids. Assumi che ogni boid sia una posizione di muting a thread verde separata in un vettore o ref che rappresenta una griglia mondiale. Pensa alla colonia di formiche di Hickey.

Ora, la documentazione su Clojure.org afferma "Tutte le letture di Ref vedranno un'istantanea coerente del" mondo Ref "come punto di partenza della transazione (il suo 'punto di lettura')."

Significa questo posso solo ottenere un'istantanea coerente della mia simulazione, ad esempio per disegnarlo, leggendo il mio vettore di arbitri all'interno di una transazione (vale a dire in un contesto dosync?)

Grazie!

risposta

6

È necessaria una transazione se si desidera un'istantanea coerente.

Se leggi gli errori al di fuori di una transazione, otterrai solo un valore istantaneo nel momento in cui leggi ognuno di essi. Non hai alcuna garanzia che un'altra transazione non cambierà uno o più dei ref tra le tue letture, così potresti finire con una vista incoerente.

Problemi correlati