Question:
How to store and access thread specific static data in dot.net.I want my static data not shared between different threads. How do I do this?
Answer:
This is called: using thread local storage (TLS)You can either use the LocalDataStoreSlot or a static member with a ThreadStatic attribute.
Thread-relative static field perform much better, but you need to know at compile time what you want to store.
LocalDataStoreSlots can be created at runtime.
Store data in LocalDataStoreSlot
// allocate a named data slot
Thread.AllocateNamedDataSlot("myData");
// get slot by name and set data
LocalDataStoreSlot myData = Thread.GetNamedDataSlot("myData");
Thread.SetData(myData , 321);
later we wanna read the data
LocalDataStoreSlot myData = Thread.GetNamedDataSlot("myData");
int myValue = (int)Thread.GetData(myData);
// free the data slot.
Thread.FreeNamedDataSlot("myData");
Store data in ThreadStaticAttribute
A static field marked with ThreadStaticAttribute is not shared between threads.
Each thread sees a different field.
... [ThreadStatic] public static string value; ...
No comments:
Post a Comment