9.muduo学习笔记之base_Thread.{h&cc}

1. Thread类说明

1. 功能

  • muduo的线程类

2. 继承

  1. noncopyable
    • muduo的类,声明为不可复制的,把赋值构造(重载=)和复制构造删除.

2. 成员变量说明

1.静态

  1. numCreated_
    • AtomicInt32类型, 对整数的原子操作,详见第二篇

2. 其他

  1. started_
    • bool类型,标识线程是否开始,若是start_为true就不能再调用start()
  2. joined_
    • bool类型,看线程是否join
  3. pthreadId_
    • 线程id
  4. tid_
    • 进程id
  5. func_
    • 线程函数
  6. name_
    • 线程名字
  7. latch_
    • 第六篇已经说过这个类的作用,就是等线程准备好后在执行

3. 成员函数说明

1. 非静态

  1. 构造函数
    • 成员变量的初始化,重要的是线程函数和名字name
    • 调用了setDefaultName(),numCreated_加1
  2. 析构函数
    • 通过调用pthread_detach函数,子线程会和主线程分离,主线程不需要通过pthread_join函数进行回收
    • 在线程start后,但没有调用join,就在析构函数中把子线程分离,这样应该是为了让线程执行完吧.
  3. start()
    • 简单来说就是调用了pthread_create(),线程函数为detail::startThread,函数参数为detail::ThreadData类型,这两个下面有说
  4. join()
    • 在线程启动并且没有join的时候,调用pthread_join()
  5. started()
    • 返回start_,看线程是否启动
  6. tid()
    • 返回线程tid_
  7. name()
    • 返回线程名字

2. 静态

  1. numCreated()
    • 返回numCreaded_的值,看一共创建了多少个线程

3. 私有

  1. setDefaultName()
    • 在构造函数中调用,当name为空时设置名字为ThreadX

4. CurrentThread类的几个成员函数

  1. cacheTid()
    • 缓存当前线程的进程id
  2. isMainThread()
    • 看tid是否和进程id相同,即看是否是主线程
  3. sleepUsec(int64_t)
    • 主要调用nanosleep(),

5. detail命名空间

1. 说明

  1. 在Thread.cc文件中,我觉得有3部分,一部分是detail命名空间里的内容,一部分是CurrentThread类的几个成员函数的实现,最后是Thread类的几个成员函数实现
  2. 后两者上面已经说了,下面说detail命名空间里的内容

2. 变量

  1. init
    • ThreadNameInitializer类型对象,类说明见下
    • 这是个全局变量,在程序一运行的时候就调用构造函数,初始化主线程信息…终于看懂了

3. 函数

  1. gettid()
    • 调用系统调用SYS_gettid,获得进程id
  2. afterFork()
    • 就是在fork后调用,初始化主线程信息…
  3. startThread(void*)
    • 将参数转换为ThreadData类型,调用类对象的runInThread()函数,ThreadData类型说明见下

4. 类

1. ThreadNameInitializer
  1. 只有一个构造函数
    • 主要就是创建主线程信息,调用afterFork,初始化t_cachedTid等信息
    • pthread_atfork(void(*prepare)(void),void(*parent)(void),void(*child)(void)),在子进程创建前父进程调用prepare,子进程创建后父进程调用parent,子进程调用child
2. ThreadData
  • 类功能如名字,线程数据
  • 成员变量
    1. func_,线程函数
    2. name_,线程名字
    3. tid_,进程id
    4. latch_,
  • 成员函数
    1. 构造函数,初始化几个变量,没啥说的
    2. runInThread(),总之就是初始化一些信息,调用func_()线程函数,处理异常.在这个函数中使用了latch_变量,作用就是等所有线程准备好后,latch_内的count_变量变为0,就通知所有线程可以执行了,默认为1的话,相当于不用等其他线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值