2009年3月30日月曜日

ThreadStaticAttribute

(MSDNより)
http://msdn.microsoft.com/ja-jp/library/system.threadstaticattribute.aspx
ThreadStaticAttribute でマークした static フィールドは、複数のスレッド間で共有されません。実行中の各スレッドは、そのフィールドのインスタンスを個別に持ち、そのフィールドに対して独自に値を設定および取得します。このフィールドに別のスレッドからアクセスすると、フィールドには別の値が格納されます。
スレッドごとにフィールドの値を別々に保持したかったので、ThreadStatic属性を非staticフィールドに付けて、うまくいかないなぁ。と悩んでました。ThreadStaticなのでstaticだけですよね。
ところで、非staticフィールドをThread間で共有したくない場合はどうするのが一般的なんでしょう。
[ThreadStatic]
private static Dictionary<TKey, TValue> _data
とりあえず、オブジェクトごとに一意のKeyを作成して、ThreadStaticなDictionaryに値を保存するように変更してみました。動いてはいるようです...