[cl-stm-devel] Counter example
Hoan Ton-That
hoan at ton-that.org
Fri Jun 30 11:23:29 UTC 2006
Hey folks,
Transactions can be parametrized by other transactions.
For testing purposes we may want a transaction to pause
for two seconds after its calculation. We can define a
higher order transaction that does this:
(deftransaction sleep-after (seconds transaction)
transaction
(trans (sleep seconds)))
With the counter example loaded (the source can be found
in src/examples/counter.lisp) we can now see what happens
when two transactions conflict.
STM> (defvar *counter* (new 'counter))
*COUNTER*
STM> (progn (perform (sleep-after 2 (increment *counter*)))
(perform (sleep-after 2 (increment *counter*))))
[debugging output elided...]
STM> (value-of (count-of *counter*))
2
STM>
If you looked at the debugging output you would see one
of the transactions has retried due to an inconsistent log.
I'm sorry that I haven't been posting regularly, but I've been
making steady progress. I'm managing to work on it, however
small everyday. I'll be posting more regularly this week with
snippets like these.
Hoan
More information about the Cl-stm-devel
mailing list