僕はデータベースで行うトランザクションの方の処理は追ったことがないので一度勉強しなきゃなぁとは思っている。STMしか知らない男の人ってry
2011-03-25 01:55:55オブジェクトに対してメッセージパッシングした場合、処理は直列化されるけれどどうやっても並列化はされない。STMは同一箇所の取り合いにさえならなければ無限に並列化する。
2011-03-25 01:54:20@repeatedly ロックベースのものはオブジェクトごとにロックを設けていく方針ですね。ですが僕のイメージではロックするというよりは「必要な書類を全部束ねてホッチキスで留める」みたいな感じです。
2011-03-25 01:53:18@kumagi_bot STMに入る時に関係のあるオブジェクト群を指す集合みたいなものがあって,あるスレッドがあるオブジェクトに対する操作をコミットした時に,その集合の中のオブジェクトへの参照を新しいのに置換する感じかいな
2011-03-25 01:55:11@kumagi_bot あれ,それって関わるオブジェクトが増えるとオブジェクト毎にロックを用意するコストってそれなりになるんじゃない?
2011-03-25 01:57:55@repeatedly ロックは単純なもの(spin-lockとか)だったら1bitあれば実装できるし、そうでなくてもN個のロックにmodで割り当てたりすれば数が増えてもある程度何とかなるんでないかな。
2011-03-25 02:07:46@repeatedly transactionに入ったら、その中で他のスレッドが保持する被STM保護オブジェクトに触るたびにそのオブジェクトの所有権を自分に移す。移せない(run)ならトランザクションマネージャにお願いしてどちらかを殺してもらう。
2011-03-25 02:01:28@repeatedly コミットの瞬間にはオブジェクトの参照には一切触れないところが最大のポイントで、持ち主の状態がrun→commitに変化する事によりrunの間に書き換えた参照先の情報へ一気にスイッチさせる事ができる。
2011-03-25 02:04:09@repeatedly Software Transactional "Memory"なので共有メモリのこと以外は考えなくても良いと勝手に思ってたんだけどそうでもないのかなw
2011-03-25 02:18:11@repeatedly トランザクション中はIOをできないようにするのが一つの解法です。見て見ぬふりをするのがもうひとつの解法です。IOは基本的に巻き戻せません。
2011-03-25 02:12:25