2012-06-21 91 views
0

我目前正试图实现一个简约的ThreadLocal类。我知道这是在DotNet 4中实现的,但我处于无法升级的情况。你可以使用System.Threading.Thread.CurrentThread作为字典中的一个键

我的想法是使用一个非常简单的类,它包含一个弱哈希表,并将基于当前线程的对象存储为关键字。 (我们有一个弱散列表的自定义实现)

您认为这是一种可行的方法,还是有任何线程问题需要考虑? 可以使用当前线程作为键,内存问题等吗?

public class SimpleThreadLocal<T> 
{ 
    private readonly WeakHashtable _threadToValue; 

    public SimpleThreadLocal() 
    { 
     _threadToValue = new WeakHashtable(); 
    } 

    public void Set(T value) 
    { 
     lock (this) 
     { 
      _threadToValue[Thread.CurrentThread] = value; 
     } 
    } 

    public T Get() 
    { 
     lock (this) 
     { 
      return (T) _threadToValue[Thread.CurrentThread]; 
     } 
    } 
} 

回答

相关问题