私は見つけた「スレッドスタティック」最近非常に便利な属性ですが、今は「スレッドローカル」タイプ属性スレッドごとに非静的データ メンバーを持つことができます。
これには重大な影響があることは承知していますが、
C#/.net にすでにそのようなものが組み込まれているのでしょうか? または、これまでのところ、この答えは「いいえ」であるように思われるので (.net < 4.0 の場合)、一般的に使用されている実装は存在するのでしょうか?
自分で実装する合理的な方法は考えられますが、すでに存在するものがあればそれを使用します。
わら人形まだ存在しない場合に探しているものを実装する例:
class Foo
{
[ThreadStatic]
static Dictionary<Object,int> threadLocalValues = new Dictionary<Object,int>();
int defaultValue = 0;
int ThreadLocalMember
{
get
{
int value = defaultValue;
if( ! threadLocalValues.TryGetValue(this, out value) )
{
threadLocalValues[this] = value;
}
return value;
}
set { threadLocalValues[this] = value; }
}
}
C# に関する無知をお許しください。私は C++ 開発者ですが、最近になって C# と .net のより興味深い機能に興味を持ち始めました。
私は.net 3.0とおそらく3.5に制限されています(プロジェクトはまもなく 3.5 に移行します)。
具体的な使用例は、スレッド固有のコールバックリストです。(架空の[ThreadLocal]属性を使用)a la:
class NonSingletonSharedThing
{
[ThreadLocal] List<Callback> callbacks;
public void ThreadLocalRegisterCallback( Callback somecallback )
{
callbacks.Add(somecallback);
}
public void ThreadLocalDoCallbacks();
{
foreach( var callback in callbacks )
callback.invoke();
}
}
ベストアンサー1
3.5(またはそれ以前)で止まっている場合は、いくつかの機能AllocateDataSlot
どれが自分の望むことをするのかなど、検討する必要があります。