Use LocalDataStoreSlot : LocalDataStoreSlot « Thread « C# / CSharp Tutorial






/*
Book Accelerated C# 2005
    * By Trey Nash
    * ISBN: 1-59059-717-6
    * 432 pp.
    * Published: Aug 2006
    * Price: $39.99
*/

using System;
using System.Threading;

public class MyClass
{
    static MyClass() {
        tlsSlot = Thread.AllocateDataSlot();
    }

    public MyClass() {
        Console.WriteLine( "Creating MyClass" );
    }

    public static MyClass MyThreadDataClass {
        get {
            Object obj = Thread.GetData( tlsSlot );
            if( obj == null ) {
                obj = new MyClass();
                Thread.SetData( tlsSlot, obj );
            }
            return (MyClass) obj;
        }
    }

    private static LocalDataStoreSlot tlsSlot = null;
}

public class MainClass
{
    private static void ThreadFunc() {
        Console.WriteLine( "Thread {0} starting...",Thread.CurrentThread.GetHashCode() );
        Console.WriteLine( "tlsdata for this thread is \"{0}\"", MyClass.MyThreadDataClass );
        Console.WriteLine( "Thread {0} exiting", Thread.CurrentThread.GetHashCode() );
    }

    static void Main() {
        Thread thread1 = new Thread( new ThreadStart(ThreadFunc) );
        Thread thread2 = new Thread( new ThreadStart(ThreadFunc) );

        thread1.Start();
        thread2.Start();
    }
}
Thread 3 starting...
Creating MyClass
tlsdata for this thread is "MyClass"
Thread 3 exiting
Thread 4 starting...
Creating MyClass
tlsdata for this thread is "MyClass"
Thread 4 exiting








20.26.LocalDataStoreSlot
20.26.1.Thread-local-storage: Unnamed slots
20.26.2.Thread-local-storage: Named slots
20.26.3.Use LocalDataStoreSlot
20.26.4.Thread-static local-storage
20.26.5.Use thread-local storage