0

現在、最小限の ThreadLocal クラスを実装しようとしています。これが DotNet 4 で実装されていることは知っていますが、アップグレードできない状況にあります。

私の考えは、弱いハッシュテーブルを保持し、現在のスレッドに基づいてオブジェクトをキーとして格納するだけの非常に単純なクラスを使用することです。(弱いハッシュテーブルのカスタム実装があります)

これは実行可能なアプローチだと思いますか、または考慮すべきスレッドの問題はありますか? 現在のスレッドをキー、メモリの問題などとして使用しても問題ありませんか?

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

1 に答える 1

1

なぜ使用しないのLogicalCallContextですか?TLS のように機能するだけでなく、実際にはよりスマートであり、非同期コールバックなどで「TLS」スロット値を保持します。論理呼び出しコンテキスト: スレッド、AppDomains、およびプロセス間でのデータの流れExecutionContext と SynchronizationContextを参照してください。

于 2012-06-21T10:39:59.843 に答える