CurrentThread

作用:

CurrentThread并不是一个类,而是一个命名空间,在mymuduo内部,目的是提供对于当前线程的管理操作。

内部变量:

__thread int t_cachedTid;    //当前线程ID
__thread char t_tidString[];//当前线程ID ,char*类型
__thread int t_tidStringLength;//char*大小
__thread const char* t_threadName;//当前线程名字

  __thread 修饰变量每一个线程有一份独立实体,各个线程的值互不干扰。也就是说,每个线程都独立的拥有这四个变量。

内部函数:

//返回线程ID
inline int tid()
{
//__builtin_expect(EXP, N)。意思是:EXP==N的概率很大。
if(__builtin_expect(t_cachedTid==,))
cacheTid();
return t_cachedTid;
} //返回线程ID,char*类型
inline const char* tidString()
{
return t_tidString;
} //返回char*类型线程ID的大小
inline int tidStringLength()
{
return t_tidStringLength;
}
//返回线程的名字
inline const char* name()
{
return t_threadName;
} bool isMainThread(); void sleepUsec(int64_t usec); //返回线程调用栈信息,
string stackTrace(bool demangle);

stackTrace获取的信息如下

/*
打印信息是这么个玩意儿。stackTrace内部实现没有去深究。
/home/zqc/c_c++Repo/Qtcode/build-mymuduo-Desktop_Qt_5_14_2_GCC_64bit-Debug/mymuduo() [0x401dd6]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7f8c8c6d5840]
/home/zqc/c_c++Repo/Qtcode/build-mymuduo-Desktop_Qt_5_14_2_GCC_64bit-Debug/mymuduo() [0x4012e9]
*/

测试:

了解一下__thread声明变量的用法,每个线程都独立拥有一个该变量。

muduo源码解析3-currentthread命名空间的更多相关文章

  1. muduo源码解析5-mutex相关类

    mutexlock和mutexlockguard class mutexlock:noncopyable { }: class mutexlockguard:noncopyable { }: 作用: ...

  2. muduo源码解析11-logger类

    logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间 ...

  3. muduo源码解析10-logstream类

    FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件 ...

  4. muduo源码解析8-date类

    date class date:copyable { }: 作用: 此类作用主要是实现年月日和julianDay的互相转换内部最重要的一个数据成员m_julianDayNumber在mymuduo:: ...

  5. muduo源码解析7-countdownlatch类

    countdownlatch class countdownlatch:noncopyable { }; 作用: countdownlatch和mutex,condition一样,用于线程之间的同步, ...

  6. muduo源码解析6-condtion类

    condition class condition:noncopyable { }; 作用: 实现了最简单condtion操作,包括init,destroy,wait,notify,notifyAll ...

  7. muduo源码解析4-exception类

    exception class exception:public std::exception { }; 作用: 实现了一个异常类,继承于std::exception,主要用于实现打印线程调用栈信息. ...

  8. muduo源码解析9-timezone类

    timezone class timezone:public copyable { }: 作用: 感觉有点看不懂,detail内部实现文件类不明白跟时区有什么关系.timezone类主要是完成各个时区 ...

  9. muduo源码解析2-AtomicIntegerT类

    AtomicIntegerT template<typename T> class atomicTntergerT:public noncopyable { }; 作用: 与std::ao ...

随机推荐

  1. leetcode 翻转字符串

    https://leetcode-cn.com/problems/reverse-words-in-a-string/ TLE代码: class Solution { public: string r ...

  2. PHP bindec() 函数

    实例 把二进制转换为十进制: <?phpecho bindec("0011") . "<br>";echo bindec("01&q ...

  3. P2569 [SCOI2010]股票交易 dp 单调队列优化

    LINK:股票交易 题目确实不算难 但是坑点挺多 关于初值的处理问题我就wa了两次. 所以来谢罪. 由于在手中的邮票的数量存在限制 且每次买入卖出也有限制. 必然要多开一维来存每天的邮票数量. 那么容 ...

  4. ZROI 提高十连测 Day1

    第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号 ...

  5. JDK8的Optional用法

    参考资料:https://www.baeldung.com/java-optional https://mp.weixin.qq.com/s/P2kb4fswb4MHfb0Vut_kZg 1. 描述 ...

  6. Shiro探索1. Realm

    1. Realm 是什么?汉语意思:领域,范围:王国:这个比较抽象: 简单一点就是:Realm 用来对用户进行认证和角色授权的 再简单一点,一个用户怎么判断它有没有登陆?这个用户是什么角色有哪些权限? ...

  7. 【BZOJ2821】作诗 题解(分块+前缀和)

    前言:世间还有这么卡常的题…… ------------------ 题目链接 题目大意:给定长度为$n$的序列${a_i}$.有$m$次询问,问$[l,r]$内出现正偶数次的数字有多少个. 这题跟蒲 ...

  8. 026_go语言中的通道方向

    代码演示 package main import "fmt" func ping(pings chan<- string, msg string) { pings <- ...

  9. canvas小画板——(2)荧光笔效果

    我们在上一篇文章中讲了如何绘制平滑曲线 canvas小画板——(1)平滑曲线. 透明度实现荧光笔 现在我们需要加另外一种画笔效果,带透明度的荧光笔.那可能会觉得绘制画笔的时候加上透明度就可以了.我们来 ...

  10. Vue3 为何使用 Proxy 实现数据监听

    博客地址:https://ainyi.com/93 vue3 响应式数据放弃了 Object.defineProperty,而使用Proxy来代替它 我们知道,在 vue2 中,实现数据监听是使用Ob ...