ページ

2009年7月29日水曜日

[.NET] IDisposable をスレッドセーフに実装する

A simple and totally thread-safe implementation of IDisposable より。
IDisposable をスレッドセーフにするリファレンス実装。
Interlocked.CompareExchange を使って軽量にスレッドセーフにしてますが、やってることはごく普通にスレッドセーフにしているだけですね。普通に lock なんかを使っても意味は同じです。

正直、IDisposable をスレッドセーフにする必要を感じたことは無いんですが、何となく気になったので。

ちなみに、IDisposable の実装方法のガイドラインは↓にあります。
アンマネージ リソースをクリーンアップするための Finalize および Dispose の実装
ここにあるように Dispose() メソッドは何回呼ばれても大丈夫なようにしておかなくちゃいけません。
ただ、スレッドセーフにしろとはまでは言ってませんし、実際、Dispose() メソッドがスレッドセーフになっているクラスはほとんどないんじゃないかと思います。


0 件のコメント:

コメントを投稿