
在 C++ 中,线程局部存储(Thread-Local Storage, TLS)是一种机制,用于为每个线程提供独立的变量副本。这意味着每个线程都可以访问自己的变量副本,而不会与其他线程的副本发生冲突。C++11 引入了 thread_local 关键字来支持线程局部存储。
thread_local 的原理thread_local 变量是在全局或静态作用域中声明的,那么它的生命周期与整个程序相同,但每个线程都有自己的副本。thread_local 变量是在函数或块作用域中声明的,那么它的生命周期与该线程的生命周期相同,但每个线程仍然有自己的副本。thread_local 变量,其初始化发生在第一次被某个线程访问时。thread_local 变量,其初始化发生在第一次被某个线程执行到该作用域时。thread_local 变量都会被自动销毁,释放内存。thread_local#include <iostream>
#include <thread>
// 全局 thread_local 变量
thread_local int global_tls = 0;
void threadFunction() {
// 每个线程都有自己的 global_tls 副本
++global_tls;
std::cout << "Thread ID: " << std::this_thread::get_id()
<< ", global_tls: " << global_tls << std::endl;
}
int main() {
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
return 0;
}thread_local#include <iostream>
#include <thread>
void threadFunction() {
// 函数作用域中的 thread_local 变量
thread_local int local_tls = 0;
// 每个线程都有自己的 local_tls 副本
++local_tls;
std::cout << "Thread ID: " << std::this_thread::get_id()
<< ", local_tls: " << local_tls << std::endl;
}
int main() {
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
return 0;
}thread_local 关键字确保每个线程都有自己的变量副本,避免了多线程环境下的数据竞争问题。thread_local 变量在第一次被访问或执行到时进行初始化。thread_local 变量都会被自动销毁,释放内存。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。