我發現「ThreadStatic」屬性是極其有用的最近的,但現在讓我想「ThreadLocal的」類型的屬性,讓我有非靜態數據成員在每個線程的基礎。C#是否具有「ThreadLocal」模擬(用於數據成員)到「ThreadStatic」屬性?
現在我知道,這將有一些不平凡的意義,但:
難道這樣的事情存在已內置到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
我僅限於.net 3.0,也許3.5(項目已經/很快將移動到3.5)。
具體使用情況是,在線程特定(使用虛構[ThreadLocal的]屬性)回調列表一拉:
class NonSingletonSharedThing
{
[ThreadLocal] List<Callback> callbacks;
public void ThreadLocalRegisterCallback(Callback somecallback)
{
callbacks.Add(somecallback);
}
public void ThreadLocalDoCallbacks();
{
foreach(var callback in callbacks)
callback.invoke();
}
}
我看不出有什麼不同。如果數據是每個線程,爲什麼不是ThreadStatic你需要什麼?換句話說,當地對什麼? – 2010-01-29 15:29:41
這就是爲什麼我提供了這個例子。我正在爲每個類尋找每個非靜態數據成員。 ThreadStatic僅適用於靜態數據成員。 – Catskul 2010-01-29 15:49:10
我很好奇,這是什麼用例?如果對象綁定到局部變量,那麼它和它的所有成員實際上是線程局部的。如果對象綁定到一個全局變量,全局的ThreadStatic將使它(和它的成員)成爲本地線程。該對象需要共享線程本地存儲纔有用,它是如何共享的,以便選定的成員有效地成爲線程本地? – 2010-02-02 01:16:41