标题: 线程局部存储(TLS) [打印本页] 作者: x86 时间: 2005-11-1 11:20 标题: 线程局部存储(TLS)
存放局部存储步骤:
1、申请数据槽
LocalDataStoreSlot slot = Thread.GetNamedDataSlot("para");
如果不存在名为para的数据槽,将分配一个所有线程均可用的para数据槽
2、往数据槽存放数据
MyPara para = new MyPara();
para.I = i;
Thread.SetData(slot,para);
3、如有必要,释放数据槽
Thread.FreeNamedDataSlot("para");
释放数据槽要小心,该操作将使所有线程存放在被释放的数据槽中的数据丢失。
读取局部存储步骤:
1、根据名字子线程局部存储中获取特定的数据槽
LocalDataStoreSlot slot = Thread.GetNamedDataSlot("para");
2、从数据槽获取数据
Object o = Thread.GetData(slot);
if (o != null)
{
//转化为特定类型
MyPara para = (MyPara) o ;
//....
}
http://blog.csdn.net/sillywxj
using System;
using System.Threading;
using System.Runtime.Remoting; //ObjectHandle所在的命名空间
namespace AppThreadDemo
{
class App
{
static private void ShowInfo()
{
Console.WriteLine("当前应用域的名字为:{0}",AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine("当前线程的代码为:{0}",Thread.CurrentThread.GetHashCode().ToString());
}
static private void demoThreadTLSAcrossThreadCallBack()
{
Console.WriteLine("\n");
App.ShowInfo();
Console.WriteLine("\n读取在另一个线程中创建的线程局部存储");
Demo.MyDemoObj obj = new Demo.MyDemoObj();
obj.demoTLS();
obj.setTLS(200);
obj.demoTLS();
Console.WriteLine("\n");
}
//主线程跟子线程在同一个应用域中执行,子线程不能获取主线程的局部存储中para
//数据槽的数据;子线程对该线程的局部存储中para数据槽中数据的修改,没有改变
//主线程局部存储区中para数据槽中的数据
static private void demoThreadTLS()
{
App.ShowInfo();
Demo.MyDemoObj obj = new Demo.MyDemoObj();
obj.setTLS(100);
Thread thread = new Thread(new ThreadStart(demoThreadTLSAcrossThreadCallBack));
thread.Start();
thread.Join();
obj.demoTLS();
}