0

0

c++怎么获取当前线程ID_c++ thread get_id方法【核心】

冰火之心

冰火之心

发布时间:2026-02-19 16:59:03

|

793人浏览过

|

来源于php中文网

原创

唯一标准方式是std::this_thread::get_id(),返回std::thread::id对象,支持比较和哈希;主线程id合法且同线程多次调用结果相同;std::thread::get_id()仅对已启动线程有效,判断运行状态应使用joinable()而非id比较。

c++怎么获取当前线程id_c++ thread get_id方法【核心】

std::this_thread::get_id() 是唯一标准方式

在 C++11 及之后,获取当前线程 ID 的标准、可移植、线程安全的方法只有 std::this_thread::get_id()。它返回一个 std::thread::id 类型对象,不是整数,也不是指针——这点容易误解。

常见错误是试图用 pthread_self()GetCurrentThreadId() 混用,但这些属于平台 API,和 std::thread 对象无直接关联,且 std::thread::id 的内部表示由实现定义(可能封装了原生句柄,也可能不)。

  • std::this_thread::get_id() 返回值可直接比较(== / !=),也可用于 std::mapstd::unordered_map(需配合 std::hash<:thread::id></:thread::id>
  • 不能假设 std::thread::id 可隐式转为 unsigned longvoid*;若真需数字标识(如日志打点),应调用 .hash() 方法得到 std::size_t
  • 主线程也拥有合法的 std::thread::id,多次调用 std::this_thread::get_id() 在同一线程中返回相同值

std::thread::get_id() 只对已启动的 thread 对象有效

std::thread 对象的成员函数 get_id() 返回的是该对象所代表线程的 ID,但它**不等于当前执行线程的 ID**——除非你正在那个线程里调用它。更关键的是:如果 std::thread 对象尚未启动(比如刚构造完、或已 join() / detach() 过),其 get_id() 返回 std::thread::id()(空 ID,等价于默认构造的 std::thread::id)。

  • 判断一个 std::thread 是否正在运行,应写成:t.joinable(),而不是 t.get_id() != std::thread::id()(虽然后者常能凑效,但语义不准确)
  • t.get_id()std::this_thread::get_id() 相等,仅当 t 正在当前线程中执行(例如在 t 绑定的函数体内)
  • 移动一个 std::thread 后,原对象的 get_id() 变为空,新对象继承原线程 ID

日志/调试中打印 thread id 要用 .hash() 或流输出

std::thread::id 本身不支持直接 std::cout (C++11 到 C++17 中部分标准库实现提供流操作符,但非强制;C++20 起才保证支持)。更可靠、可移植的做法是:

橙篇
橙篇

百度文库发布的一款综合性AI创作工具

下载

立即学习C++免费学习笔记(深入)”;

  • 调试时用 std::cout —— 多数现代 libstd<a style="color:#f60; text-decoration:underline;" title="c++" href="https://www.php.cn/zt/17603.html" target="_blank">c++</a> / libc++ 已实现,输出形如 <code>1234567890(十进制)或十六进制地址,但格式不跨平台
  • 日志中需要稳定数字标识,用 std::hash<:thread::id>{}(std::this_thread::get_id())</:thread::id>,结果是 std::size_t,可安全转为 uint64_t 打印
  • 避免用 reinterpret_cast<uintptr_t>(&some_local_var)</uintptr_t> 猜测线程 ID,这是未定义行为

Windows 和 Linux 下底层 ID 不可互换

虽然 std::this_thread::get_id() 在所有平台上语义一致,但它的底层实现差异很大:

  • Linux 上,libstdc++ 通常把 pthread_t 直接存入 std::thread::idpthread_t 是结构体,非纯整数);libc++ 可能做哈希映射
  • Windows 上,MSVC 的 std::thread::id 一般包装 DWORD(即线程内核句柄 ID),但不保证与 GetCurrentThreadId() 返回值相同(后者是用户态 ID,更轻量)
  • 因此,绝不要把 std::thread::id 强转为 pthread_t*DWORD 去调用系统 API;如需原生句柄,应从 std::thread 构造时保存,或用平台专用方式获取

真正跨平台的线程身份标识,只应基于 std::thread::id 的相等性或哈希值,而非其二进制布局或数值含义。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

115

2025.11.27

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

675

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

675

2023.08.10

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

94

2025.12.01

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.11.17

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

660

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9.8万人学习

C 教程
C 教程

共75课时 | 4.8万人学习

C++教程
C++教程

共115课时 | 18.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号