首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

请问C++跨平台应该如何更好的获取线程id并维护线程id到实例指针的映射?

在C++中,跨平台获取线程ID并维护线程ID到实例指针的映射可以通过以下方法实现:

  1. 使用std::this_thread::get_id()获取当前线程ID。
  2. 使用std::unordered_map存储线程ID到实例指针的映射。

以下是一个示例代码:

代码语言:cpp
复制
#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到实例指针的映射,并且可以跨平台使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 领券