11-muduo-base-Thread

classDiagram class Thread~T~ Thread : +bool started_ Thread : +bool joined_ Thread : +bool started Thread : +pthread_t pthreadId_ Thread : +pid_t tid_ Thread : +ThreadFunc func_ Thread : +string name Thread : CounDownLatch latch_ Thread : AtomicInt32 numCreated_ Thread : <<create>>-Thread(ThreadFunc, string) Thread : <<destroy>>-~Thread() Thread : +start() void Thread : +join() void Thread : +started() bool Thread : +tid() pid_t Thread : +name() string Thread : +numCreated() int Thread : +setDefaultName() void

1 类说明

1 功能

这是muduo的线程类,主要时封装pthread_XXXX的系列函数。对标std::thread标准库的线程类

2 继承

继承noncopyable

2 成员变量说明

1 non-static

  • started_
    • 线程运行标记
  • joined_
    • 线程join标记
  • pthreadId_
    • pthread_t类型变量
  • tid_
    • 线程的tid
  • func_
    • 线程函数
  • name_
    • 线程名称
  • latch_
    • 倒计门阀,用于线程同步。这里主要用于同步tid的获取

2 static

  • numCreated_
    • 如名,已线程创建数量

3 成员函数说明

  • 构造函数
    • 初始化所有的成员变量
  • 析构函数
    • 对于已经start但还没join的线程进行detach
  • start
    • 启动线程
  • join
    • 封装pthread_join
  • started
    • 返回线程是否开始运行
  • tid
    • 返回tid
  • name
    • 返回线程名称
  • numCreated
    • 返回已创建线程数
  • setDefaultName
    • 设置默认的线程名称Thread:numCreated

4 detail namespace

1 函数

  • gettid
    • 通过syscall(SYS_gettid)返回tid
  • afterFork
    • 在fork后调用,初始化主线程信息:tid、name
  • startThread
    • 将参数转为ThreadData类型指针,再调用其runInThread,然后delete

2 类

ThreadNameInitializer

  • 主要就是创建主线程信息,调用afterFork,初始化t_cachedTid等信息
  • pthread_atfork(void(prepare)(void),void(parent)(void),void(*child)(void)),在子进程创建前父进程调用prepare,子进程创建后父进程调用parent,子进程调用child

(221条消息) linux线程函数 pthread_atfork 的深入理解_大飞飞鱼的博客-CSDN博客_pthread_atfork

ThreadData

如名,这个类主要包含线程的数据

  • 成员变量
    • func_:线程函数
    • name_:线程名字
    • tid_:tid
    • latch_:倒计门阀
  • 成员函数
    • 构造函数:初始化成员变量
    • runInThread
      • 将倒计门阀的值减一,作用就是等所有线程准备好后,latch_内的 count _ 变量变为0,就通知所有线程可以执行了,默认为1的话,相当于不用等其他线程
      • 然后调用func_线程函数
      • 根据catch清空来对muduo::CurrentThread::t_threadName赋值,并生成异常信息
posted @ 2023-05-04 14:54  DavidJIAN  阅读(23)  评论(0)    收藏  举报