On Thu, Sep 17, 2009 at 1:09 PM, John Harrop <jharrop...@gmail.com> wrote:
> Don't commutes commute with one another, but not with other writes?

That's certainly correct from the standpoint of thinking about how
commutes get reexecuted during the commit and other writes (from
ref-set and alter) do not.

Here is how I explain commute in my STM article at
http://ociweb.com/mark/stm/article.html.

In most cases, alter is preferred over commute. Using commute is only
appropriate when the order of changes to the Ref made by concurrently
running transactions doesn't matter. This is related to the
mathematical definition of "commutative" which includes the phrases
"the result obtained ... does not differ with the order". Choosing to
use commute basically says "I'm going to modify a Ref, but I don't
care if another transaction modifies it before I commit my change.
Decisions I make in this transaction based on my value of the Ref will
still be correct. I want the value of the Ref to be recomputed when
I'm ready to commit based on the newest value of the Ref."

Some situations where commute makes sense include accumulating objects
in a collection and storing values calculated from a collection (such
as a minimum, maximum or average). Suppose a collection is held in a
Ref. If two concurrent transactions add an object to the collection,
in many cases it doesn't matter which adds to it first. There may be
no reason for transaction "A" to retry just because transaction "B"
added to the collection before "A" committed. Suppose another Ref
holds a value computed from the collection such as the maximum value
in it. There may be no reason for transaction "A" to retry just
because transaction "B" committed a change to the maximum value. It
can be safely and correctly computed again based on the latest
contents of the collection.

-- 
R. Mark Volkmann
Object Computing, Inc.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to