Hi all,
In section 11.2.1 of the book /The Joy of Clojure/, the author shows
the effect of
`dosync' by starting 100 threads and then watching the value of a Ref:
(go make-move 100 100)
(board-map #(dosync (deref %)) board)
Here, the first `go' form starts 100 threads, their effect is
modifying `board' using
`dosync' and `alter'. `board-map' is defined as
(defn board-map [f bd]
(vec (map #(vec (for [s %] (f s))) bd)))
I don't quite understand the use of `dosync' in the second `board-map'
form. In
my testing, the following three seems identical:
(board-map #(dosync (deref %) board)
(dosync (board-map deref board)) ;; Should be the same as above
(board-map deref board) ;; Without `dosync' at all
The docstring of `deref' says "Within a transaction, returns the in-
transaction-value
of ref, else returns the most-recently-committed value of ref." So
the above three
forms are all the same, right? Or is there any difference between
them?
Thanks in advance,
Guanpeng Xu
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en