开发者

Thread local storage

what is the best way to store some variable local to eac开发者_JAVA百科h thread?


If you use .Net 4.0 or above, as far as I know, the recommended way is to use System.Threading.ThreadLocal<T> which also gives lazy initialization as a bonus.


You can indicate that static variables should be stored per-thread using the [ThreadStatic] attribute:

[ThreadStatic]
private static int foo;


Another option in the case that scope is an issue you can used Named Data Slots e.g.

    //setting
    LocalDataStoreSlot lds =  System.Threading.Thread.AllocateNamedDataSlot("foo");
    System.Threading.Thread.SetData(lds, "SomeValue");

    //getting
    LocalDataStoreSlot lds = System.Threading.Thread.GetNamedDataSlot("foo");
    string somevalue = System.Threading.Thread.GetData(lds).ToString();

This is only a good idea if you can't do what James Kovacs and AdamSane described


Other option is to pass in a parameter into the thread start method. You will need to keep in in scope, but it may be easier to debug and maintain.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜