在C++中,thread_local
关键字用于声明一个线程局部变量,这意味着每个线程都有其自己的变量副本
class MyClass {
public:
~MyClass() {
// 清理操作
}
};
thread_local MyClass myObject;
std::thread_local_storage
:C++17引入了std::thread_local_storage
,它允许你更细粒度地控制线程局部变量的存储。你可以使用std::destroy_all
函数来销毁所有线程局部变量的实例。#include <iostream>
#include <thread>
#include <thread_local_storage>
struct MyClass {
~MyClass() {
std::cout << "MyClass destroyed in thread " << std::this_thread::get_id() << std::endl;
}
};
std::thread_local_storage<MyClass> myObjectStorage;
void threadFunction() {
MyClass& myObject = myObjectStorage.construct<MyClass>();
// 使用 myObject
}
int main() {
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
std::destroy_all(myObjectStorage.get_storage());
return 0;
}
在这个例子中,我们使用std::thread_local_storage
来存储MyClass
的实例。当线程结束时,MyClass
的实例会被销毁,从而完成清理操作。注意,我们需要调用std::destroy_all
来销毁所有线程局部变量的实例。