chenshuo / muduo

Event-driven network library for multi-threaded Linux server in C++11
https://github.com/chenshuo/muduo
Other
14.7k stars 5.15k forks source link

muduo::Condition::waitForSeconds 在日志库的使用中的问题? #536

Closed Chenhang-A closed 2 years ago

Chenhang-A commented 2 years ago

陈硕老师,您好:

muduo::Condition::waitForSeconds 函数中使用了pthread_cond_timedwait函数

在AsyncLogging::threadFunc函数中使用了muduo::Condition::waitForSeconds

但是pthread_cond_timewait在超时后是没有获得锁的情况下, 前端日志继续append()不会带来问题吗?

以下是Muduo日志库源代码片段:

{
  muduo::MutexLockGuard lock(mutex_);
  if (buffers_.empty())  // unusual usage!
  {
    cond_.waitForSeconds(flushInterval_);
  }
  buffers_.push_back(std::move(currentBuffer_));
  currentBuffer_ = std::move(newBuffer1);
  buffersToWrite.swap(buffers_);
  if (!nextBuffer_)
  {
    nextBuffer_ = std::move(newBuffer2);
  }
}