ceph bluestore源码分析:C++ 获取线程id
阅读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相关推荐
- ceph bluestore源码分析:非对齐写逻辑
文章目录 环境 原理说明 总结 环境 ceph:12.2.1 场景:ec 2+1 部署cephfs,执行如右写模式:dd if=/dev/zero of=/xxx/cephfs bs=6K count ...
- ceph bluestore源码分析:admin_socket实时获取内存池数据
环境: 版本:ceph 12.2.1 部署完cephfs 使用ceph-fuse挂载,并写入数据 关键参数: debug_mempool = true 将该参数置为true即可查看详细的blustor ...
- ceph bluestore 源码分析:ceph-osd内存查看方式及控制源码分析
文章目录 内存查看 内存控制 内存控制源码分析 通过gperftools接口获取osd进程实际内存 动态设置cache大小 动态调整cache比例 trim释放内存 本文通过对ceph-osd内存查看 ...
- ceph bluestore 源码分析:刷缓存(trim)逻辑
环境 ceph版本:12.2.1 部署模式:ec 2+1 osd: 3个 且资源池已经有数据 执行命令:ceph daemon osd.0 flush_store_cache 进行刷缓存.即将dump ...
- lodash源码分析之获取数据类型
所有的悲伤,总会留下一丝欢乐的线索,所有的遗憾,总会留下一处完美的角落,我在冰峰的深海,寻找希望的缺口,却在惊醒时,瞥见绝美的阳光! --几米 本文为读 lodash 源码的第十八篇,后续文章会更新到 ...
- 分页池内存持续增长_鸿蒙内核源码分析(从进程/线程视角看内存)
这篇文章说说内存,内存的管理是极其复杂的模块,涉及到非常多概念,光地址就有逻辑,线性,物理地址三个,网上文章很多,参差不齐,没有很好基础或实战经验的同学基本得懵掉,本篇最后也有这些概念介绍.系列篇打算 ...
- Spring源码分析-如何获取Bean对象
导语 在上篇博客中 介绍了关于BeanFactory和FactoryBean相关的操作,并且查看了在两个操作中他们具体的代码有那些,这篇博客主要就是顺着上篇博客思路继续来分析Bean对象的获取.下 ...
- Tensorflow 源码分析-会话与线程池之间的关系
1. Tensorflow 的sessionFactory 创建新的会话,tensorflow使用了多工厂模式,在不同的场景下使用不同的工厂, 使用什么工厂模式由传递进来的SessionOptions ...
- java锁源码分析-1获取锁的过程
这篇文章(包括后边两篇)是六月份写的,写完后由于工作较忙,草稿一致没时间修改,今天偶尔翻到,担心哪天弄丢了,于是先以草稿的形式发布,内容有瑕疵,等以后有时间再修复. 解读类的结构 首先来看类的继承关系 ...
最新文章
- 如何构建金字塔结构性思维
- errno_t open_s()打开文件出现的错误分析
- 玩玩IronPython
- 在 Win10 中配置 Linux 开发环境
- qt designer 自定义插件找不到指定的模块_go与qt的新酒老瓶
- Guacamole 介绍以及架构
- 循环数组的动态规划问题
- android 坐标度分秒转换工具,百度地图API详解之坐标系转换
- python(25)- 面向对象补充Ⅰ
- Win10系统下CMD命令提示符输入ipconfig命令无法使用的解决方法
- [网易IM通讯]推送小结
- 怎么把图片分散对齐PHP,Word技巧系列封面如何快速对齐
- ubuntu系统中用c语言编写简单程序
- ssh总断 (by quqi99)
- PS对图片进行透明化处理以及字体颜色的加深
- 神州数码项目管理最佳实践之四
- 被召者 RC: E_NOINTERFACE (0x80004002) 无法运行virtualBox的完善解决办法
- I2C和SPI总线对比,RFID及NFC区别
- 【大数据AI人工智能】数据智能到底是什么——企业级 DT 数据智能实践详解
- oshi-core 简介、中文文档、中英对照文档 下载
热门文章
- Deep learning的一些教程 (转载)
- 1m网速是什么意思,1m带宽是什么意思
- sql 基础--mysql 5 (6)
- Linux socket TIME_WAIT 优化
- 用Windows Media Player截图的方法
- 利用numpy对像素点进行操作
- 用Python在Windows或Linux下批量删除文件夹中指定的文件
- 计算机基础2多媒体,《计算机基础》第2章-多媒体技术.pptx
- 桥接模式和路由模式区别_【微课堂】路由器设置:桥接模式vs路由模式
- php pdo 中文乱码,php pdo oracle中文乱码的快速解决方法