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