using System; using System.Threading; namespace NET.MST.Seventh.ThreadDataSlot{ class MainClass { /// <summary> /// 测试数据插槽 /// </summary> static void Main() { Console.WriteLine( " 现在开始测试数据插槽 " ); // 开辟五个线程来同时运行 // 这里不适合用线程池, // 因为线程池内的线程会被反复使用 // 导致线程ID一致 for ( int i = 0 ; i < 5 ; i ++ ) { Thread thread = new Thread(ThreadDataSlot.Work); thread.Start(); } Console.Read(); } } /// <summary> /// 包含线程方法和数据插槽 /// </summary> class ThreadDataSlot { // 分配一个数据插槽,注意插槽本身是全局可见的, // 因为这里的分配是在所有线程的TLS内建立数据块 static LocalDataStoreSlot _localSlot = Thread.AllocateDataSlot(); /// <summary> /// 线程方法,操作数据插槽来存放数据 /// </summary> public static void Work() { // 这里把线程ID存放在数据插槽内 // 一个应用程序内线程ID不会重复 Thread.SetData(_localSlot, Thread.CurrentThread.ManagedThreadId); // 查看一下刚刚插入的数据 Console.WriteLine( " 线程{0}内的数据是:{1} " , Thread.CurrentThread.ManagedThreadId.ToString(), Thread.GetData(_localSlot).ToString()); // 这里线程睡眠1秒 Thread.Sleep( 1000 ); // 查看其它线程的运行是否干扰了当前线程数据插槽内的数据 Console.WriteLine( " 线程{0}内的数据是:{1} " , Thread.CurrentThread.ManagedThreadId.ToString(), Thread.GetData(_localSlot).ToString()); } }}