ClojureのSTMを試してみた

今日は作業に待ち時間があったのでClojureを勉強してみることにした。

open 11の前を見ると、同じ変数を書き換えるスレッドが2つあった場合に、トランザクションには同時に入ることができることがわかる。11のチェックポイントが開いて、トランザクション1で書き換えに進んだ。open 21でトランザクション2に処理が戻ってくると、やり直しを繰り返し始める。1秒に10回くらいリトライしているね。最後に、open 12してトランザクション1が終了した後、トランザクション2はやり直しに成功して無事にトランザクションを抜けている。

https://gist.github.com/2874143

start transaction 1
start transaction 2
----------
open 11
modified ref rx: 1
----------
open 21
start transaction 2
start transaction 2
start transaction 2
start transaction 2
----------
start transaction 2
start transaction 2
start transaction 2
start transaction 2
start transaction 2
start transaction 2
open 12
finish transaction 1
start transaction 2
modified ref rx: 2
----------
open 22
finish transaction 2