1. 前置知识
(1)gettid 内核给线程(轻量级进程)分配的进程id,全局(所有进程中)唯一;
(2)pthread_self()是在用户态实现的,获取的是相对于进程的线程控制块的首地址,只是在当前进程空间中是唯一的。不能保证同一进程先后多个线程具有不同的id。(当前一个线程结束其生命周期,进程又新创建了一个线程,那么该线程ID可能会使用消亡线程的ID)。
(3)struct timespec
{
__time_t tv_sec; /* 秒数 long int */
long tv_nsec; /* 纳秒数*/
};
2. 代码
#include <time.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include<sys/syscall.h> /* 没有gettid函数,我们可以自己封装一下 */ pid_t gettid() { return syscall(SYS_gettid); } /* 获取时间 */ static unsigned long long GetTickMs() { unsigned long long nTimeV[2] = {0}; struct timespec nTime; //linux中用的时间结构 clock_gettime(CLOCK_MONOTONIC,&nTime); //CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响 nTimeV[0] = nTime.tv_sec * 1000; //转为ms nTimeV[1] = nTime.tv_nsec / 1000000; //转为ms return (nTimeV[0] + nTimeV[1]); //返回当前的时间是多少 ms } int main() { unsigned long long nTimeVal[2] = {0}; nTimeVal[0] = GetTickMs(); for(int i = 0; i < 10000000; i++) { } nTimeVal[1] = GetTickMs(); printf("Thread pid:%u, tid:%u, spend: %lldms \n", (unsigned int)getpid(), (unsigned int)gettid(), nTimeVal[1]- nTimeVal[0]); return 0; }
标签:gettid,nTimeVal,unsigned,long,代码运行,线程,测试,linux,include From: https://www.cnblogs.com/dkhlaojogo/p/17718572.html