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