zoukankan      html  css  js  c++  java
  • 线程本地存储

    实现线程本地存储最简单的方式是在静态字段上附加ThreadStatic特性:
            [ThreadStatic] static int _x;
    这样,每一个线程都会得到一个_x的独立副本。
    但是,[ThreadStatic]并不支持实例字段(它对实例字段并不会产生任何作用);此外,它也不适于和字段初始化器配合使用,因为它们仅仅会在调用静态构造器的线程上执行一次。如果一定要处理实例字段,或者需要使用非默认值,则更适合使用ThreadLocal<T> 。

    ThreadLocal<T>类型,他的出现更大的简化了TLS的操作。ThreadLocal<T>类型和Lazy<T>惊人相似
    ThreadLocal的值是延迟计算的:其中的工厂函数会在(每一个线程)第一次调用时计算实际的值。
    ThreadLocal可以提供TLS中数据的默认值。

    另外ThreadLocal是泛型类,而LocalDataStoreSlot不是

    第三种实现线程本地存储的方式是使用Thread类的GetData和SetData方法。这些方法会将数据存储在线程独有的“插槽”(slot)中。Thread.GetData负责读取线程独有的数据存储中读取数据,而Thread.SetData则向其中写入数据。这两个方法都需要使用LocalDataStoreSlot对象来获得这个插槽。所有的线程都可以获得相同的插槽,但是它们的值却是互相独立的。

    数据槽分为下列两种类型:命名槽和未命名槽。 两种类型都是使用 LocalDataStoreSlot 结构实现。命名槽非常便捷,因为可以在需要时检索槽,具体操作是将它的名称传递给 GetNamedDataSlot 方法,而不用维护对未命名槽的引用。 不过,如果另一个组件对线程相对存储使用相同的名称,并且线程同时执行你的组件和另一个组件的代码,这两个组件可能会相互损坏数据。

  • 相关阅读:
    Linux进程间通信之信号量
    C语言文件操作
    Linux多线程同步方法
    Linux进程间通信之共享内存
    关于P2P下载的思考
    学习Jxta,初窥门径
    庆祝一下,基于JXTA的P2P文件共享传输文件测试成功。
    关于java nio在windows下实现
    Java aio和JSR 203
    关于文件目录的P2P共享问题
  • 原文地址:https://www.cnblogs.com/yetsen/p/13546837.html
Copyright © 2011-2022 走看看