C++获取线程ID:std与pthread接口返回结果差异原因问询
两种线程ID获取方式结果差异的原因
内核级标识 vs 标准库抽象标识
pthread_threadid_np是Apple平台的原生pthread扩展接口,返回的是系统内核层面的线程ID——这是操作系统调度线程时使用的全局唯一整数标识,和你通过ps等系统工具看到的线程ID是同一套数值体系。C++标准库的实现细节
std::this_thread::get_id()属于C标准库的抽象接口,其返回的std::thread::id值的具体内容由编译器的标准库实现决定。在Apple的libc实现中,这个值实际上是线程内部控制块的内存地址,输出时以十六进制形式展示(比如你看到的0x1708b3000),它仅用于C++程序内部区分不同的线程对象,和系统内核的线程ID没有直接关联。数值本质完全不同
前者是操作系统分配的线程编号(uint64_t类型的整数),后者是内存地址的表示,二者从定义、用途到编码逻辑都完全独立,自然会出现数值上的差异。
内容的提问来源于stack exchange,提问作者Zohar81
相关产品推荐
相关产品推荐

