c – 如何获得std :: thread()的Linux线程ID

c – 如何获得std :: thread()的Linux线程ID,第1张

概述我正在玩std :: thread,我想知道如何获得一个新的std :: thread()的线程id,我不是在讨论std :: thread :: id而是提供给我的 *** 作系统ID线程(您可以使用pstree查看它). 这仅仅是为了我的知识,它仅针对 Linux平台(不需要是可移植的). 我可以像这样在线程中获取Linux Thread Id: #include <iostream>#includ 我正在玩std :: thread,我想知道如何获得一个新的std :: thread()的线程ID,我不是在讨论std :: thread :: ID而是提供给我的 *** 作系统ID线程(您可以使用pstree查看它).
这仅仅是为了我的知识,它仅针对 Linux平台(不需要是可移植的).

我可以像这样在线程中获取linux Thread ID:

#include <iostream>#include <thread>#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>voID SayHello(){    std::cout << "Hello ! my ID is " << (long int)syscall(SYS_gettID) << std::endl;}int main (int argc,char *argv[]){    std::thread t1(&SayHello);    t1.join();    return 0;}

但是如何在主循环中检索相同的ID?我没有找到使用std :: thread :: native_handle的方法.我相信它有可能通过pID_t gettID(voID)得到它;因为c 11的实现依赖于pthreads,但我一定是错的.

有什么建议吗?
谢谢.

解决方法 假设您正在使用GCC标准库,std :: thread :: native_handle()将返回pthread_self()返回的pthread_t线程ID,而不是gettID()返回的OS线程ID. std :: thread :: ID()是同一个pthread_t的包装器,而GCC的std :: thread没有提供任何获取 *** 作系统线程ID的方法,但你可以创建自己的映射:
std::mutex m;std::map<std::thread::ID,pID_t> threads;voID add_tID_mapPing(){  std::lock_guard<std::mutex> l(m);  threads[std::this_thread::get_ID()] = syscall(SYS_gettID);}voID wrap(voID (*f)()){  add_tID_mapPing();  f();}

然后创建你的线程:

std::thread t1(&wrap,&SayHello);

然后通过以下方式获取ID:

pID_t tID = 0;while (tID == 0){  std::lock_guard<std::mutex> l(m);  if (threads.count(t1.get_ID()))    tID = threads[t1.get_ID()];}
总结

以上是内存溢出为你收集整理的c – 如何获得std :: thread()的Linux线程ID全部内容,希望文章能够帮你解决c – 如何获得std :: thread()的Linux线程ID所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存