概述:
当我们使用系统调用函数获取线程名字或者线程id,其实这是非常耗系统资源的,当我们频繁获取会占用很多时间。使用__thread关键字就可以完美解决这个问题,只需第一次获取一次即可,极大的减少资源。同时这个功能在我们一个函数被多个线程调用,调试的时候加上线程id和名字,就可以很清楚打印是谁调用的,而且不耗资源,很便于调试。__thread关键字我就稍微说下吧,这个网上很多, __thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。这个就类似于C语言我们出错打印errno这个值,这个errno变量。
示例Demo:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/syscall.h>
#include <sys/prctl.h>
__attribute__((unused)) __thread pid_t threadPid = 0;
__attribute__((unused)) __thread char threadPname[20] = {0};
pid_t get_thread_pid(void)
{
if (0 == threadPid)
{
threadPid = syscall(SYS_gettid);
printf(