std::hash<std::thread::id>

来自cppreference.com
< cpp‎ | thread‎ | thread‎ | id
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
协作式取消
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩与屏障
(C++20)
(C++20)
未来体
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
风险指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 弃用)
(C++11)(C++20 弃用)
内存定序
(C++11)(C++26 弃用)
原子操作的自由函数
原子标志的自由函数
 
 
std::thread::id
成员函数
非成员函数
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
辅助类
hash<std::thread::id>
 
在标头 <thread> 定义
template<> struct hash<std::thread::id>;
(C++11 起)

std::hashstd::thread::id 类的模板特化允许用户获得线程标识符的散列。

[编辑] 示例

#include <chrono>
#include <iostream>
#include <thread>
#include <vector>
using namespace std::chrono_literals;
 
void foo()
{
    std::this_thread::sleep_for(10ms);
}
 
int main()
{
    std::vector<std::thread> v;
    for (int n = 0; n < 4; ++n)
        v.emplace_back(foo);
 
    std::hash<std::thread::id> hasher;
    for (auto& t : v)
    {
        std::cout << "线程 " << t.get_id() << " 散列为 "
                  << hasher(t.get_id()) << '\n';
        t.join();
    }
}

可能的输出:

线程 139786440144640 散列为 8905351942358389397
线程 139786431751936 散列为 9222844670065909738
线程 139786423359232 散列为 18199000599186780501
线程 139786414966528 散列为 15386662774029264672

[编辑] 参阅

(C++11)
散列函数对象
(类模板) [编辑]