ev-mold-scoped-lock-emit-001¶
| 字段 | 值 |
|---|---|
| 项目 | rui314/mold |
| 固定 commit | 27162691b71a |
| 路径 | lib/common.h |
| 行段 | L100-L114 |
| 特性 | std::scoped_lock |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-25 |
| 测试代码 | 否 |
| 发现方式 | tree-sitter |
用法¶
用 scoped_lock 保护一次性输出,并在静态成员上直接声明 inline mutex
为什么典型¶
加锁范围覆盖输出与 emitted 标志的联合更新;锁对象随 emit() 返回自动释放,任何提前 return 都不会漏解锁。
摘录¶
void emit() {
if (emitted)
return;
std::scoped_lock lock(mu);
out << ss.str() << '\n';
emitted = true;
}
private:
std::ostream &out;
std::stringstream ss;
bool emitted = false;
static inline std::mutex mu;
};
备注¶
生产路径;scoped_lock 的单参数形式在此替代 lock_guard,与 C++17 的 inline 静态成员配合,头文件内即可定义共享互斥量。