我需要按需创建一些线程,因为我之前不知道我需要多少。std::vector<std::thread> threads;
为了在每次创建新线程时使用向量“存储”线程,我将它们推回到向量上:threads.push_back(std::thread(worker));
要存储(用于测试)线程 id,我使用以下内容:double test = std::hash<std::thread::id>()(std::this_thread::get_id());
根据 cpp-references hash、thread::id和get_id这应该可以正常工作。
但只有这一行我得到的 id 总是 0(零)
如果 id 在哈希线下方添加以下行,它可以工作,我从线程中得到一个哈希 id:std::thread::id tid = std::this_thread::get_id();
即使我不使用tid
有人可以解释这种行为吗?我正在使用eclipse juno并多次清理+重建项目......我只是不明白:/
这里的代码:(逐行,因为这里的格式规则很愚蠢-.-
std::vector<std::thread> threads;
void worker (){
double test = std::hash<std::thread::id>()(std::this_thread::get_id());
std::thread::id tid = std::this_thread::get_id();
printf("%ld\n", test);
}
void joinThreads(std::thread& t)
{
t.join();
}
int main() {
for (int i = 0; i < 10; ++i) {
threads.push_back(std::thread(worker) );
}
std::for_each(threads.begin(),threads.end(),joinThreads);
return 0;
}