线程本地存储(TLS)

线程共享它所属的进程的数据。这种数据共享提供了多线程编程的好处之一。但是,在某些情况下,每个线程可能需要自己的某些数据副本。这样的数据称为线程本地存储(或TLS)

例如,在事务处理系统中,我们可能会在单独的线程中为每个事务提供服务。每个事务可能被分配一个唯一的标识符。为了将每个线程与其唯一标识符关联起来,我们可以使用线程本地存储。

使用局部变量对TLS感到困惑是很容易的。在单个函数调用期间,仅本地变量可见,而TLS数据在函数调用之间可见。TLS在某些方面类似于静态数据。唯一的区别是TLS数据对于每个线程都是唯一的。大多数线程库(包括Windows和Pthreads)都提供了某种形式的对线程本地存储的支持。Java也提供支持。