/*
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();
}
}
Output
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