2012-08-16 10 views
5

To jest teoretyczne pytanie motywowane moim pragnieniem lepszego zrozumienia współbieżności Clojure'a.Czy należy powtórzyć wiele transakcji Clojure w transakcji w celu zachowania spójności?

Załóżmy, że piszę boidy. Załóżmy, że każde boid jest oddzielną pozycją mutującą zielony wątek w wektorze lub refs reprezentującą światową siatkę. Pomyśl o kolonii mrówek Hickey.

Teraz dokumentacja na Clojure.org stwierdza "Wszystkie odczyty z Ref będą widzieć spójną migawkę" Ref świata "od momentu rozpoczęcia transakcji (jej" punkt odczytu ")."

To znaczy mogę uzyskać spójny obraz mojej symulacji tylko, na przykład w celu wyciągnięcia go, czytając mój wektor odn obrębie transakcji (czyli w kontekście dosync?)

Dzięki!

Odpowiedz

6

Potrzebujesz transakcji, jeśli chcesz uzyskać spójną migawkę.

Jeśli czytasz refs poza transakcją, otrzymasz natychmiastową wartość w momencie, gdy czytasz każdą z nich. Nie masz żadnej gwarancji, że kolejna transakcja nie zmieni jednego lub więcej dokumentów referencyjnych pomiędzy Twoimi odczytami, więc możesz skończyć z niespójnym widokiem.

Powiązane problemy