深入了解muduo库:EventLoopThread类
EventLoopThread类
startLoop()
one loop per thread
是moduo库设计的核心思想,为了保证这一点,EventLoop
类有一个成员const pid_t threadId_
,记录创建该loop的线程id,表示该loop属于某一特定线程;以后可能会出现其他线程调用该loop的 public
函数的情况(特别是主线程调用工作线程的loop),这时候就要用这个 threadId_
对比当前调用线程id,如果不一致需唤醒对应线程,让它来调用;
startLoop()
会在线程池生成工作线程时被调用,它的调用者是主线程,由于loop的threadId_
是const
类型,只能在构造函数处被初始化且不能被另外修改,因此loop只能在工作线程处创建,而EventLoopThread
类中的EventLoop *loop_
成员指向了该loop,该成员的赋值就在startLoop()
内,这里就涉及到了主线程和工作线程同步问题(主线程需要在工作线程完成loop创建后才能进行赋值),也就有了下面的代码:
深入了解muduo库:EventLoopThread类
http://example.com/2022/10/26/muduo-EventLoopThread/