如何识别和比较线程ID

时间:2014-04-03 11:56:38

标签: c++ multithreading

我的共享库中有一个名为Home的类。我有一个多线程应用程序,我需要在这个类Home中创建一个实例。现在,对于每个实例化此类的线程,我需要根据类构造函数中的thread-id创建一个单独的跟踪文件。我的问题是,我无法将pthread_self()的返回值用作intlong int(这是一种名为pthread_t的不透明类型)作为参考创建跟踪文件。我需要根据线程ID区分线程,并在创建相应的跟踪文件时将它们用作引用。请告诉我解决这个问题的方法。非常感谢任何形式的帮助。如果您需要更多详细信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

你不能使用,例如以pthread_t为键的std::unordered_set,并使用从begin迭代器到新插入的pthread_t的距离作为键?

这样的东西
std::unordered_set<pthread_t> ids;

...

int get_id(const pthread_t& tid)
{
    const auto it = ids.find(tid);
    if (it == ids.end())
    {
        // Thread id not found, insert it
        const auto pair = ids.insert(tid);
        if (!pair.second)
            return -1;  // Failed to insert
        it = pair.first;
    }

    // Return the distance between the beginning and the position of the thread-id
    return std::distance(ids.begin(), it);
}

注意:我还没有真正测试过(甚至尝试编译)。

另请注意,我使用的是C ++ 11 std::unordered_set类,以及C ++ 11中引入的类型推断auto关键字。