[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