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

Reply via email to