C# には、「ThreadStatic」属性に相当する「ThreadLocal」(データ メンバー用)がありますか? 質問する

C# には、「ThreadStatic」属性に相当する「ThreadLocal」(データ メンバー用)がありますか? 質問する

私は見つけた「スレッドスタティック」最近非常に便利な属性ですが、今は「スレッドローカル」タイプ属性スレッドごとに非静的データ メンバーを持つことができます。

これには重大な影響があることは承知していますが、

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

.NET 4.0 の登場です!

3.5(またはそれ以前)で止まっている場合は、いくつかの機能AllocateDataSlotどれが自分の望むことをするのかなど、検討する必要があります。

おすすめ記事