首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

VB.NET并行与分布式编程(三)-线程局部存储TLS[2]

2012-09-10 
VB.NET并行与分布式编程(3)-线程局部存储TLS[2]接上节,我们可以使用下面语句创建一个线程本地变量,利用静

VB.NET并行与分布式编程(3)-线程局部存储TLS[2]

接上节,我们可以使用下面语句创建一个线程本地变量,利用静态TLS功能

Dim betterCounter As ThreadLocal(Of Integer) = New ThreadLocal(Of Integer)(Function() 1)

betterCounter的值初始化为1。在本程序中,jg被初始化为50,并定义成线程本地变量

?

??????? Dim jg As ThreadLocal(Of Integer) = New ThreadLocal(Of Integer)(Function() 50)

?

然后,我们使用jg.Value?来读写这个本地变量的值

?jg.Value -= mynum

?


三、动态TLS

?

?

运行结果如我们所愿,jg变量通过动态TLS提供的槽机制实现了线程本地变量

?

?
VB.NET并行与分布式编程(三)-线程局部存储TLS[2]
?

??????? '分配一个新的槽,这个槽存放线程本地数据,槽名称为
??????? 'myjg,名称必须唯一
??????? Thread.AllocateNamedDataSlot(data)
??????? Dim jg As LocalDataStoreSlot
??????? jg = Thread.GetNamedDataSlot(data)
??????? Thread.SetData(jg, 100)
以上代码是关健,我们使用命名数据槽,当然,我们也可以使用未命名槽,因为未命名数据槽相对较简单,所以这里使用了命名数据槽,向大家演示一下其功能。

注意:

如果使用 AllocateNamedDataSlot 方法已分配已经存在的指定名称的槽,此方法会引发异常,且无法测试是否已分配某个槽。另外,使用此方法分配的数据槽必须使用 FreeNamedDataSlot 来释放。

?

?

本例中,我们分配槽使用下面语句

Thread.AllocateNamedDataSlot(data)

获取某个命名槽的引用,以便进行下一步操作

jg = Thread.GetNamedDataSlot(data)

?

Thread.SetData和Thread.GetData可写、读槽中数据

四、数据槽的值在线程或上下文对象之间不共享

?

热点排行