2012-06-21 4 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]; 
     } 
    } 
} 

답변

관련 문제