在C++中,跨平台获取线程ID并维护线程ID到实例指针的映射可以通过以下方法实现:
std::this_thread::get_id()
获取当前线程ID。std::unordered_map
存储线程ID到实例指针的映射。以下是一个示例代码:
#include<iostream>
#include <unordered_map>
#include<thread>
class MyClass {
public:
MyClass() {
thread_id = std::this_thread::get_id();
instances[thread_id] = this;
}
~MyClass() {
instances.erase(thread_id);
}
static MyClass* getInstance(std::thread::id id) {
return instances[id];
}
private:
std::thread::id thread_id;
static std::unordered_map<std::thread::id, MyClass*> instances;
};
std::unordered_map<std::thread::id, MyClass*> MyClass::instances;
void thread_func() {
MyClass* instance = MyClass::getInstance(std::this_thread::get_id());
std::cout << "Thread ID: "<< std::this_thread::get_id() << ", Instance pointer: "<< instance<< std::endl;
}
int main() {
std::thread t1(thread_func);
std::thread t2(thread_func);
t1.join();
t2.join();
return 0;
}
在这个示例中,我们创建了一个MyClass
类,该类在构造函数中获取当前线程ID并将其与实例指针存储在std::unordered_map
中。在析构函数中,我们从映射中删除线程ID。getInstance
静态方法用于根据线程ID获取实例指针。
在main
函数中,我们创建了两个线程,每个线程都调用thread_func
函数。thread_func
函数中,我们通过调用MyClass::getInstance
方法获取当前线程的实例指针,并输出线程ID和实例指针。
这种方法可以在多个线程之间维护线程ID到实例指针的映射,并且可以跨平台使用。
领取专属 10元无门槛券
手把手带您无忧上云