我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux下获取线程id的方法总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux下获取线程id的方法总结

方法总结说明

  1. getpid()
    Linux系统调用,获取进程id,也是主线程id。

  2. gettid()
    Linux系统调用,获取线程id。
    C运行库没有封装这个接口…用syscall()方式调用。
    在主线程中,getpid = gettid。

  3. syscall(SYS_gettid)
    直接调用Linux系统调用(即上面的gettid)。

  4. pthread_self()
    pthread库函数,返回pthread中的线程id。
    这个id不同于gettid()的值。不同的实现可能返回不同的结果。
    使用这个函数,需要在编译时链接pthread库。

  5. this_thread::get_id()
    C++获取tid方法,返回值和pthread_self()相同。
    返回类型是thread::id类,不能直接拿到id值。
    id类提供了一个输出运算符<<,通过stringstream转换一下拿到tid值。
    (不知道标准委员会的大咖们怎么想的?还是我没有领会到精髓)

测试代码

#include    #include #include #include #include #include #include using namespace std;void printId() {    cout << "getpid: " << getpid() << endl;//    cout << "gettid: " << gettid() << endl;    pid_t tid;    tid = syscall(SYS_gettid);    printf("syscall gettid: %d\n", tid);    cout << "pthread_self:" << pthread_self() << endl;    cout << "this_thread::get_id: " << this_thread::get_id() << endl;    stringstream stream;    string pidStr;    stream << this_thread::get_id(); // return type: class thread::id    stream >> pidStr;    printf("convert pid: [%s]\n", pidStr.c_str());    cout << endl << endl;}int main() {    printId();    for (int i=0; i<3; i++) {        thread th(printId);        th.detach();    }    std::cout << "Hello, World!" << std::endl;    sleep(10);    return 0;}

Ubuntu上编译、运行结果

# 主线程getpid: 7257 # 进程idsyscall gettid: 7257 # 线程id,主线程,同进程idpthread_self: 140489738667840this_thread::get_id: 140489738667840 # 结果和pthread_self相同convert pid: [140489738667840] # 转换后获取到的tid# 新线程getpid: 7257# 进程id,不变syscall gettid: 7258#不同的线程idpthread_self: 140489716274944# 不同线程idthis_thread::get_id: 140489716274944convert pid: [140489716274944]......Process finished with exit code 0

来源地址:https://blog.csdn.net/yinminsumeng/article/details/130268131

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux下获取线程id的方法总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux下获取线程id的方法总结

方法总结说明 getpid() Linux系统调用,获取进程id,也是主线程id。 gettid() Linux系统调用,获取线程id。 C运行库没有封装这个接口…用syscall()方式调用。 在主线程中,getpid = getti
2023-08-18

Vue获取DOM的几种方法总结

这篇文章主要介绍了Vue获取DOM的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

Shell脚本中获取进程ID的方法

提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为
2022-06-04

Android编程获取控件宽和高的方法总结分析

本文总结分析了Android编程获取控件宽和高的方法。分享给大家供大家参考,具体如下: 我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢我们来看一下示例: 首先我们自己写一个控件,这个控件非常简单:public clas
2022-06-06

Android开发之获取LayoutInflater对象的方法总结

本文实例讲述了Android开发之获取LayoutInflater对象的方法。分享给大家供大家参考,具体如下: 在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View。本文主要目的是总
2022-06-06

Android 四种获取屏幕宽度的方法总结

Android 四种获取屏幕宽度的方法 方法一:WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);int width = wm.
2022-06-06

Shell获取字符串长度的多种方法总结

前言 我们在日常工作中,对于求字符串操作在shell脚本中很常用,实现的方法有很多种,下面就来给大家归纳、汇总了求字符串的几种可能方法,话不多说了,来一起看看详细的介绍吧。方法如下: 【方法一】:利用${#str}来获取字符串的长度【方法二
2022-06-04

C/C++获取当前时间的方法总结(最全)

这篇文章主要为大家整理了C/C++中获取当前时间的最全方法,文中的示例代码讲解详细,具有一定的学习和借鉴价值,需要的可以了解一下
2023-03-19

Python实现获取内网IP地址的方法总结

这篇文章主要为大家详细介绍了五种利用Python语言实现获取内网IP地址的方法,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
2023-03-24

android里TextView加下划线的几种方法总结

如果是在资源文件里:phone:0123456MyLink
2022-06-06

java 多线程的几种实现方法总结

java 多线程的几种实现方法总结1.多线程有几种实现方法同步有几种实现方法多线程有两种实现方法,分别是继承Thread类与实现Runnable接口同步的实现方面有两种,分别是synchronized,wait与notifywait():使
2023-05-30

Android 中三种启用线程的方法总结

在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而H
2022-06-06

Android 获取设备屏幕大小的几种方法总结

1、通过WindowManager获取DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);System
2023-05-31

iOS如何获取设备型号的最新方法总结

在开发中,我们经常需要获取设备的型号(如 iPhone X , iPhone 8 Plus 等)以进行数据统计,或者做不同的适配。但苹果并没有提供相应的系统 API 让我们直接取得当前设备的型号。 其中, UIDevice 有一个属性 mo
2022-05-19

js获取对象属性值的两种方法使用总结

这篇文章主要给大家介绍了关于js获取对象属性值的两种方法使用,分别是通过.获取和通过[]获取这两种方法,文中介绍了详细的方法和不同点,需要的朋友可以参考下
2023-05-18

Python进阶之多线程的实现方法总结

在python中主要有两种实现多线程的方式:通过threading.Thread () 方法创建线程和通过继承 threading.Thread 类的继承重写run方法,接下来我们分别说一下多线程的两种实现形式吧
2023-05-16

linux获取进程pid的方法是什么

在Linux中,有多种方法可以获取进程的PID(进程标识符),以下是常用的几种方法:1. 使用ps命令:使用ps命令可以列出当前系统的进程信息,包括PID。可以使用以下命令获取指定进程的PID:```ps -ef | grep ```例如,
2023-10-10

编程热搜

目录