thread_local关键字与线程局部存储
请解释C++中thread_local关键字的含义,线程局部存储的生命周期,以及适用场景。
回答
孤独的心
thread_local声明每个线程拥有独立的变量副本,各线程互不干扰。生命周期:在线程创建时构造,线程结束时析构。
thread_local int tls_counter = 0;
void func() {
tls_counter++; // 每个线程独立计数
}
适用场景:
- 避免锁竞争(如线程ID缓存、errno)
- 线程专有数据(如分配器、随机数种子)
- 减少缓存行伪共享(false sharing)
注意事项:不可用于动态库中某些复杂场景;thread_local变量地址在不同线程中不同。