The reason that comes to mind most easily for me is that of deciding which
notion of equality to use for 'the value of Ref hasn't changed'.

Also, short of keeping a counter on the Ref of the number of times it's
been changed, and comparing on that, there's no other way to tell that no
other thread has changed the Ref, as far as I know. Although I could be
wrong, *throws question to the Gods of clojure*

On Fri, May 18, 2012 at 8:03 AM, Warren Lynn <wrn.l...@gmail.com> wrote:

> Thanks and these are certainly workable solutions. But is there any
> particular reason why with commute the update function is ALWAYS
> called twice, even when no other thread changed the ref value at the
> commit time? That is what bothers me.
>
> On May 17, 5:46 pm, DAemon <forsakendae...@gmail.com> wrote:
> > Would some of this difficulty be ameliorated by calling memoize on the
> > function that you use? That way, if it's an expensive function, and the
> > value hasn't changed, it's just looked up rather than recalculated.
> >
> > - DAemon
> >
> > On Fri, May 18, 2012 at 6:28 AM, Stuart Sierra
> > <the.stuart.sie...@gmail.com>wrote:
> >
> >
> >
> >
> >
> >
> >
> > > I think the point with `commute` is to allow for more concurrency at
> the
> > > expense of more computation.
> >
> > > If you want assurance that your function is only called once, you can
> use
> > > `alter`.
> >
> > > Keep in mind that *any* code in a Ref transaction has the potential to
> be
> > > called more than once if there's a conflict.
> >
> > > All this doesn't mean that it's impossible to avoid the duplicate
> > > computation on `commute`. The code to study would be here:
> >
> > >https://github.com/clojure/clojure/blob/8fda34e4c77cac079b711da59d5fe.
> ..
>  >
> > > -S
> >
> > >  --
> > > 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
>
> --
> 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
>

-- 
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