BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

.NET 4 Beta 1、ソフトウエアトランザクショナルメモリをサポート

| 作者: Abel Avram フォローする 12 人のフォロワー , 翻訳者 徳武 聡 フォローする 1 人のフォロワー 投稿日 2009年8月3日. 推定読書時間: 3 分 |

原文(投稿日:2009/7/28)へのリンク

マイクロソフトは.NET 4.0 Beta 1の新しいバージョンをリリースした。これにはSTM.NETが含まれている。これはソフトウエアトランザクショナルメモリ機構だ。共有メモリに対する並列処理には、ロックを用いて制御する方法があるが、この方法の代替手段になるのがSTMだ。

マイクロソフトはSTM.NETを下記のように定義する。:

ソフトウエアトランザクショナルメモリ(STM.NET)は共有状態を効率的に分離する仕組みです。プログラマは“原子的”で“分離された”トランザクションとして実行されるコードを、平行して実行されている他のトランザクションから隔離します。

トランザクショナルメモリは学術の世界では将来有望な技術のだと考えられています。また、アプリケーションが現代的なマルチコアのハードウエア上で実行されるようになりつつある状況に適した技術として繰り返し提示されています。STM.NETが目指すのは専門家が書いたコンポーネントを使って並列処理を利用することです。これらのコンポーネントはアプリケーションのプログラマによって利用されます。プログラマはSTMを用いたこれらのコンポーネントを組み合わせることで、並列処理を実現します。トランザクショナルメモリはこの仕組みを安全に、そして簡単に利用できるようにします。

STMは楽観的な方法で共有メモリにアクセスする。共有するデータを安全に変更できるようになるまで書き込み側をブロックする代わりに、そのスレッドは共有データにアクセスして編集をしながら、実行した読み込みと書き込みのログを採取する。 そして最後に、他のスレッドが同時に共有データにアクセスしていないか検証する。アクセスしていなかったら、コミットして処理内容を確定させ、もし他のスレッドが共有データにアクセスしていたら、トランザクションを中止してすべての変更をロールバックする。

STM.NETではAtomic.Do()を使って、ひとつのトランザクションとして実行したい処理を指定する。

Atomic.Do(()=> {

   <statememts>

});

他のロック機構と同じようにSTMも性能の劣化が伴う。読み取り/書き込みログを正確に採取しなければならないし、コミット処理にも時間がかかるからだ。しかし、STMには、この問題を埋め合わせる概念的な面での利益がある、という考えもある。その利益とは、STMのほうが細粒度ロックよりも簡単に使えるということだ。トランザクショナルなプログラミングは本当に簡単か?と題した論文で、オースティンのテキサス大学のChristopher J. Rossbach氏、Owen S. Hofmann氏、そしてEmmett Witchel氏は、STMの習熟や開発の過程と、ロックを使う他の方法の習熟や開発過程を比較し、その結果を分析して下記のように論じる。

平均的に見て、トランザクショナルメモリを使うと、粗粒度ロックを使う方法よりも多くの開発時間が必要だが、細粒度ロックや条件同期よりは少なく済む。

… 2つ以上のトランザクションが割り当てられるような複雑な場合、粗粒度ロックとトランザクショナルメモリのほうが、細粒度ロックよりも少ない時間で済む。これは、トランザクションの利点が現われたからだ。つまり、細粒度ロックの複雑なコーディングとデバックが減り、1つ以上のロックが必要な場合のロック順の制御がなくなったことが分析結果に反映していると思われる。

この論文は下記のような結論になる。

この論文が提供するのは、トランザクションナルなプログラミングは高性能なロック機構よりもプログラムミスをしにくいということの証拠である。たとえ新米プログラマがトランザクションを理解するのが難しくてもこの証拠は妥当なものだ。学生の自己評価によれば、トランザクショナルメモリは粗粒度ロックより使うのが少し難しく、細粒度ロックや条件同期よりは簡単だ。しかし、学生が書いたコードの同期処理のエラー率の分析結果はもっと劇的である。すなわち、似たようなプログラムでも、トランザクションのほうがロック方式よりも遥かに正確に実装できる。

必要システム: Visual Studio 2008、Windows Installer 3.1以降, Internet Explorer 5.01以降。STM.NETは現在C#でしか利用できない。

参考:NET 4.0 Beta 1 with STM.NET, STMプログラミングガイド, STM:サンプル、ドキュメント、構成ファイル

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT