thread_local 是c++11中引入的一个关键字,它主要是引入了一种新的存储类型,它会影响变量的存储周期。
c++中有四种存储周期:
- automatic
- static
- dynamic
- thread
thread_local 一般主要用于在保证线程安全的函数中!
在c++中有且仅有thread_local 修饰的变量具有线程线程(thread)周期。这些声明的变量在线程开始的时候被生成,在线程结束后被销毁,并且每一个线程都拥有一个独立的变量实例。
例如,在一个类的成员函数中声明了一个thread_local 变量,则对于同一个线程内的该类的多对象,都会共享同一个变量实例。并且只会在第一个使用这个成员函数的时候 初始化这个thread_local 变量,这一点有点类似static成员变量。
在多线程无锁编程中有用,内存模型待补