当前位置: 首页 > news >正文

Linux线程标识获取

Linux线程标识获取

  • 线程唯一标识
    • pthread_self
    • syscall(SYS_gettid)
    • std::this_thread::get_id()

线程唯一标识

在Linux系统中,线程标识一般是用于唯一标识一个线程的数字,其对于操作系统管理和用户程序都有重要的用途,如日志记录中记录线程ID有助于快速定位哪写线程产生了错误或者警告的信息,同时也便于运维和监控程序。实际开发中,我们有多种方式来获取线程标识。

pthread_self

POSIX threads 提供了 pthread_self 来获取当前线程的标识符,其返回值为pthread_t。但是pthread_t 的值仅在进程内有意义,同一时刻的不同进程之间的 pthread_self 值可能是相同的,无法做到全局唯一。 而且哪怕对于单一进程来言,先执行线程A,等A执行完毕后立刻执行线程B,两个线程很可能获取到相同的线程标识,其值很有可能会重复。

syscall(SYS_gettid)

在Linux系统中,更加常见的方式是使用 gettid() 系统调用来获取线程的唯一标识,不过 glibc 并没有实现这个系统调用,不过这不是问题,我们可以自己封装一个,如下:

    pid_t gettid(){return syscall(SYS_gettid);}

该系统调用的返回值为 pid_t, 其值一般为一个小整数,它直接代表着内核的任务调度id, 该标识是全局唯一的,多个进程中的不同线程的标识也是唯一的,且 pid_t 的分配方式为轮询分配,短时间启动销毁的多个线程也会获取到不同的标识。

std::this_thread::get_id()

如果你是C++开发者,可能还见过 std::this_thread::get_id(),使用时需要包含头文件 < thread> 。这个函数提供了C++标准库级别的线程ID,可以很好和C++的 std::thread 库配合,但是很不幸,std::thread::get_id()的值也是进程内有效的,如果你没有跨进程唯一线程标识的需求,使用该函数也是很不错的选择。


http://www.mrgr.cn/news/39867.html

相关文章:

  • 官网:视觉是第一记忆,没有记忆点的官网设计是失败的。
  • 随笔 漫游互联网
  • 图片加文字怎么弄?分享6种图片加文字方法
  • YAML管理接口框架配置的最佳实践!!
  • QT开发:深入掌握 QtGui 和 QtWidgets 窗口管理:QMainWindow、QDialog 和 QWidget 的高级应用
  • C/C++ 中的未定义行为(Undefined Behavior, UB)
  • windows全局配置pip镜像源
  • Linux线程栈大小与进程栈大小关系
  • Linux云计算 |【第四阶段】RDBMS1-DAY6
  • SpringAOP学习
  • 【Android 14源码分析】WMS-窗口显示-流程概览与应用端流程分析
  • Vue 中的路由:构建强大的单页应用导航
  • OceanBase企业级分布式关系数据库
  • 读《巴菲特之道》:学会像运营企业一样投资,掌握战胜市场的关键技能
  • 设计模式与非设计模式什么情况下使用
  • 智源研究院推出全球首个中文大模型辩论平台FlagEval Debate
  • Java面试题整理
  • swizzle
  • 【STM32】 TCP/IP通信协议(3)--LwIP网络接口
  • JVM 系列知识体系全面回顾