阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称
C++获取线程id是通过系统调用来直接获取

函数描述

头文件:<sys/syscall.h>
函数名称:syscall(SYS_gettid)
该函数直接返回了一个pid_t int类型的数字,即为当前线程id

此外函数pthread_self同样能够获取线程id,但是该函数获取到的线程id为posix的线程id,并不是真实的线程id.所以最后获取到的数值是一个特别长的标识,并非top -Hp pid中的实际线程id

函数使用

编写如下代码:

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/syscall.h>
#include <pthread.h>
#define gettid() syscall(SYS_gettid)
using namespace std;void *threadFunc(void *p)
{printf("go into threadfunc ,pthread_self id is %d\n",pthread_self());printf("go into  threadfunc ,gettid id is %d \n",gettid());int i = 0;while(1){i++;sleep(1);}return NULL;
}int main()
{printf("man thread  tid is %d \n man pid is %d\n",gettid(),getpid());pthread_t id;pid_t tid;pthread_create (&id, NULL, threadFunc, NULL);pthread_create (&id, NULL, threadFunc, NULL);pthread_create (&id, NULL, threadFunc, NULL);int i=0;while (1){i++;sleep(1);}return 0;
}

运行结果如下:

[root@node1 ~]# ./a.out
man thread  tid is 28244 man pid is 28244
go into threadfunc ,pthread_self id is -1511180544
go into  threadfunc ,gettid id is 28245
end and get the tgkill tid is -1
go into threadfunc ,pthread_self id is -1527965952
go into threadfunc ,pthread_self id is -1519573248
go into  threadfunc ,gettid id is 28246
go into  threadfunc ,gettid id is 28247

同时使用命令查看得到如下输出

[root@node1 ~]# ps -ef|grep a.out
root     28244 21581  0 09:41 pts/10   00:00:00 ./a.out
root     28902  8965  0 09:41 pts/7    00:00:00 grep --color=auto a.out
[root@node1 ~]# ps -Tp 28244  PID  SPID TTY          TIME CMD
28244 28244 pts/10   00:00:00 a.out
28244 28245 pts/10   00:00:00 a.out
28244 28246 pts/10   00:00:00 a.out
28244 28247 pts/10   00:00:00 a.out

命令ps -Tp pid同样可以得到当前进程相关的信息,第二列SPID即为线程id.可以看到进程id和主线程id是一致的,同时pthread_self函数的posix 线程id并非我们实际真实的线程id

ceph bluestore源码分析:C++ 获取线程id相关推荐

  1. ceph bluestore源码分析:非对齐写逻辑

    文章目录 环境 原理说明 总结 环境 ceph:12.2.1 场景:ec 2+1 部署cephfs,执行如右写模式:dd if=/dev/zero of=/xxx/cephfs bs=6K count ...

  2. ceph bluestore源码分析:admin_socket实时获取内存池数据

    环境: 版本:ceph 12.2.1 部署完cephfs 使用ceph-fuse挂载,并写入数据 关键参数: debug_mempool = true 将该参数置为true即可查看详细的blustor ...

  3. ceph bluestore 源码分析:ceph-osd内存查看方式及控制源码分析

    文章目录 内存查看 内存控制 内存控制源码分析 通过gperftools接口获取osd进程实际内存 动态设置cache大小 动态调整cache比例 trim释放内存 本文通过对ceph-osd内存查看 ...

  4. ceph bluestore 源码分析:刷缓存(trim)逻辑

    环境 ceph版本:12.2.1 部署模式:ec 2+1 osd: 3个 且资源池已经有数据 执行命令:ceph daemon osd.0 flush_store_cache 进行刷缓存.即将dump ...

  5. lodash源码分析之获取数据类型

    所有的悲伤,总会留下一丝欢乐的线索,所有的遗憾,总会留下一处完美的角落,我在冰峰的深海,寻找希望的缺口,却在惊醒时,瞥见绝美的阳光! --几米 本文为读 lodash 源码的第十八篇,后续文章会更新到 ...

  6. 分页池内存持续增长_鸿蒙内核源码分析(从进程/线程视角看内存)

    这篇文章说说内存,内存的管理是极其复杂的模块,涉及到非常多概念,光地址就有逻辑,线性,物理地址三个,网上文章很多,参差不齐,没有很好基础或实战经验的同学基本得懵掉,本篇最后也有这些概念介绍.系列篇打算 ...

  7. Spring源码分析-如何获取Bean对象

    导语   在上篇博客中 介绍了关于BeanFactory和FactoryBean相关的操作,并且查看了在两个操作中他们具体的代码有那些,这篇博客主要就是顺着上篇博客思路继续来分析Bean对象的获取.下 ...

  8. Tensorflow 源码分析-会话与线程池之间的关系

    1. Tensorflow 的sessionFactory 创建新的会话,tensorflow使用了多工厂模式,在不同的场景下使用不同的工厂, 使用什么工厂模式由传递进来的SessionOptions ...

  9. java锁源码分析-1获取锁的过程

    这篇文章(包括后边两篇)是六月份写的,写完后由于工作较忙,草稿一致没时间修改,今天偶尔翻到,担心哪天弄丢了,于是先以草稿的形式发布,内容有瑕疵,等以后有时间再修复. 解读类的结构 首先来看类的继承关系 ...

最新文章

  1. 如何构建金字塔结构性思维
  2. errno_t open_s()打开文件出现的错误分析
  3. 玩玩IronPython
  4. 在 Win10 中配置 Linux 开发环境
  5. qt designer 自定义插件找不到指定的模块_go与qt的新酒老瓶
  6. Guacamole 介绍以及架构
  7. 循环数组的动态规划问题
  8. android 坐标度分秒转换工具,百度地图API详解之坐标系转换
  9. python(25)- 面向对象补充Ⅰ
  10. Win10系统下CMD命令提示符输入ipconfig命令无法使用的解决方法
  11. [网易IM通讯]推送小结
  12. 怎么把图片分散对齐PHP,Word技巧系列封面如何快速对齐
  13. ubuntu系统中用c语言编写简单程序
  14. ssh总断 (by quqi99)
  15. PS对图片进行透明化处理以及字体颜色的加深
  16. 神州数码项目管理最佳实践之四
  17. 被召者 RC: E_NOINTERFACE (0x80004002) 无法运行virtualBox的完善解决办法
  18. I2C和SPI总线对比,RFID及NFC区别
  19. 【大数据AI人工智能】数据智能到底是什么——企业级 DT 数据智能实践详解
  20. oshi-core 简介、中文文档、中英对照文档 下载

热门文章

  1. Deep learning的一些教程 (转载)
  2. 1m网速是什么意思,1m带宽是什么意思
  3. sql 基础--mysql 5 (6)
  4. Linux socket TIME_WAIT 优化
  5. 用Windows Media Player截图的方法
  6. 利用numpy对像素点进行操作
  7. 用Python在Windows或Linux下批量删除文件夹中指定的文件
  8. 计算机基础2多媒体,《计算机基础》第2章-多媒体技术.pptx
  9. 桥接模式和路由模式区别_【微课堂】路由器设置:桥接模式vs路由模式
  10. php pdo 中文乱码,php pdo oracle中文乱码的快速解决方法