On Feb 11, 10:55 am, Jeffrey Straszheim <straszheimjeff...@gmail.com>
wrote:
> So, ensure can make you rollback if the value is not current when you
> commit.  Can it make other transactions rollback if you've ensured a ref,
> and commit before them?
>

No. That's what I meant to imply by (b). ensure has no effect on other
transactions.

Rich

> On Wed, Feb 11, 2009 at 7:52 AM, Rich Hickey <richhic...@gmail.com> wrote:
>
> > On Feb 10, 10:26 pm, Jeffrey Straszheim <straszheimjeff...@gmail.com>
> > wrote:
> > > Since we're on the subject, what exactly does ensure *do* that simply
> > > reading the ref does not?  And then, how does it differ from writing.
>
> > If you merely read a ref in a transaction that won't prevent another
> > transaction from changing it. (You won't see that change in your
> > transaction, of course). If you ensure it, and it is changed by
> > another transaction, your transaction will retry.
>
> > ensure has the rollback-if-modified effects of writing, but differs
> > from writing in that it doesn't write anything. That matters:
>
> > a) for clarity - a fake write to ensure integrity confuses maintainers
> > b) for concurrency - a fake write looks like a write to other
> > transactions, and might cause them to roll back.
> > c) for lack of effects - a fake write might trigger validation or
> > watch notifications.
> > d) for some unknown future reason
>
> > i.e., I think it is preferable to have an explicit ensure operation
> > for when that is all that is required, so Clojure's STM has one.
>
> > Rich
--~--~---------~--~----~------------~-------~--~----~
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
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