ev-spdlog-lambda-mpmc-wait-002¶
| 字段 | 值 |
|---|---|
| 项目 | gabime/spdlog |
| 固定 commit | 79524ddd08a4 |
| 路径 | include/spdlog/details/mpmc_blocking_q.h |
| 行段 | L30-L38 |
| 特性 | lambda 表达式 |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-27 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
用捕获 this 的谓词 lambda 等待队列腾出空间
为什么典型¶
条件变量的 wait 需要谓词,lambda 就地表达判断,作用域与锁的范围一致。
摘录¶
// try to enqueue and block if no room left
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();
}
备注¶
生产路径;谓词直接读取队列状态,无需额外具名类型。