跳转至

ev-spdlog-condvar-queue-not-full-002

字段 值
项目 gabime/spdlog
固定 commit 79524ddd08a4
路径 include/spdlog/details/mpmc_blocking_q.h
行段 L31-L38
特性 std::condition_variable
许可证 MIT
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-11-03
测试代码 否
发现方式 manual

用法

用 condition_variable::wait 等待队列腾出空间

为什么典型

有界队列满时生产者必须阻塞;wait 的谓词检查 q_.full(),被唤醒后重新验证条件,避免虚假唤醒导致越界写入。

摘录

    void enqueue(T &&item) {
        {
            std::unique_lock<std::mutex> lock(queue_mutex_);
            pop_cv_.wait(lock, [this] { return !this->q_.full(); });
            q_.push_back(std::move(item));
        }
        push_cv_.notify_one();
    }

备注

生产头文件;等待与入队在同一把 unique_lock 保护下完成,锁在 notify 之前释放,避免唤醒者立刻又阻塞。

查看固定 commit 源码 · 返回证据索引