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