I ran program #1 and #2 on Clojure 1.1.0-alpha-SNAPSHOT from git -> program #1 output skew -> program #2 no output
What version are you using? Could be something that's been fixed recently. On Sep 16, 6:14 am, Krukow <karl.kru...@gmail.com> wrote: > After a discussion in dcug about the write-skew anomaly, I wanted to > write a program exhibiting the anomaly, together with a similar > program using ensure to eliminate it. > > My program doesn't work: it exhibits the anomaly, but ensure doesn't > fix it, and neither does adding a validator to the refs. I'd like to > know if it is a bug in my program, in my understanding of 'ensure' and/ > or validators, or, finally, in Clojure. > > The program simulates the write-skew example from wikipedia: there are > two accounts a1 and a2 initially holding $100 each, and the bank > requires that @a1 + @a2 >= 0 always. A user concurrently tries two > transactions: one withdrawing $200 from a1 and one withdrawing $200 > from a2. The bank code checks that @a1 + @a2 >= 200 before > transferring any money. With serializable transaction-semantics, the > bank's constraint is never violated; with snapshot-isolation > semantics, it may be violated. > > I have four programs. The first is intended to exhibit the write-skew > anomaly, and it works as intended: after running a few times, a state > with @a1 = @a2 = -100 may be observed. > > http://paste.lisp.org/display/87117 > > The second is intended to elibinate the write-skew anomaly, by letting > the changing transactions use ensure: > > http://paste.lisp.org/display/87117#1 > > The third program tries to eliminate the write-skew by using > ref :validator instead (also ensures both refs!) > > http://paste.lisp.org/display/87117#2 > > Finally, I wrote a serialized version using an agent. As expected > there is no write-skew. > > http://paste.lisp.org/display/87117#3 > > Help? --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---