EventLoopThread::startLoop() 中为什么需要创建局部变量 loop?是否可以返回 loop_?
作者: lamb007创建于 2025年10月31日更新于 2026年3月17日
EventLoop* EventLoopThread::startLoop() { assert(!thread_.started()); thread_.start();
EventLoop* loop = nullptr; { MutexLockGuard lock(mutex_); while (loop_ == nullptr) { cv_.wait(lock, this { return loop_ != nullptr; }); } loop = loop_; }
return loop; }
void EventLoopThread::threadFunc() { EventLoop loop;
if (callback_) { callback_(&loop); }
{ MutexLockGuard lock(mutex_); loop_ = &loop; cv_.notify(); }
loop.loop(); //assert(exiting_); MutexLockGuard lock(mutex_); loop_ = nullptr; }
内容来源: chenshuo/muduo