【并发编程十八】线程局部存储(TLS)
简介:
对于一个存在多个线程的进程来说,有时需要每个线程都自己操作自己的这份数据。这有点类似c++类的实例的属性,每个实例对象操作的都是自己的属性。我们把这样的数据成为线程局部存储(thread local storage,TLS)
一、定义
- 线程局部存储是指对象内存在线程开始后分配,线程结束时回收,且每个线程有该对象自己的实例。
- 简单的说,线程局部存储的对象都是独立于各个线程的。
- 实际上,这不是一个新鲜的概念,虽然c++一直没有在语言层面支持它,但是很早之前操作系统就有办法执行线程局部存储了。(c++直到c++11才从语言层面实现了)
二、线程局部存储的实现
- 由于线程本身是操作系统中的概念,因此线程局部存储这个功能是离不开操作系统支持的。
- 而不同的操作系统对线程局部存储的实现也不相同,以至于使用的系统api也有区别,
- 这里我们对windows和linux简单介绍下,对c++11提供的线程局部存储我们详细写下demo。