dev .NET 特集:スレッドの落とし穴

(id:NyaRuRu:20050316#p4) で紹介した @IT に続き ITmedia でもマルチスレッドに関する記事が公開されました.

スレッドの落とし穴
http://www.itmedia.co.jp/enterprise/articles/0503/23/news086.html

マルチスレッドシングルトンに関しては Patterns & Practices でも取り上げられているので,先にそっちを読むのもありかもしれません.有名なダブルチェックロッキングパターンへの参考文献も紹介されています.

C# でのシングルトンの実装
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/dnpatterns/htm/ImpSingletonInCsharp.asp?frame=true

シングルトン以外の類似問題が気になる方は『Web アプリケーション セキュリティ強化 : 脅威とその対策』より以下の項目あたりでもどうぞ.

スレッディング
http://www.microsoft.com/japan/msdn/security/guidance/secmod80.mspx#EFAA

最後にもう一度特集記事へ.

スレッドそのものは80年代に開発され、また非同期プログラミングも歴史がそれほど短いわけではない。しかしこれらの技術は長い間パフォーマンスを求める特定の箇所にしか使われてこなかった。

応答速度への要求や家電との比較において、ソフトウェアに対する要求が急激に高まり、安全なコードを書く助けをするはずのOSや言語がこの分野に限っては遅れていると筆者は見ている。CPUのデュアルコア化が進み、マルチプロセッサマシンが普通に使われるようになれば、問題はさらに顕在化する。

これに対し、OSや言語の歩みは遅い。WindowsにおいてはCOMのスレッド問題を正しく理解している人は、ほぼ居ないに等しい。マイクロソフトは、.NETによってその複雑性を解消したわけだが、言語として、あるいはWindows全体としてはまだいろいろな問題をはらんでいる。2006年のLonghornで解決へ向けた取り組みが見られるが、それでもこれから5年や10年はプログラマーの努力によって問題を解決することになるだろう。

安易に使わない、きちんとした知識を身につける、そしてほかの部分よりも深いコードレビューといった、地道な努力が必要になる分野だ。本稿が少しでもその助けになることを願う。

WinForms の「オブジェクトがスレッド(というコンテキスト)に属する」という描像は COM の STA 以来のつきあいですが,やっぱりこれしかなかったのかなぁという疑問が無いわけでもないです.そういえば DirectX でも「描画スレッド分離派」が存在して時々議論を見かけますが,これについてもどこかでまとめて書いておきたいですなぁ.