ev-mold-scoped-lock-symbol-merge-002¶
| 字段 | 值 |
|---|---|
| 项目 | rui314/mold |
| 固定 commit | 27162691b71a |
| 路径 | src/relocatable.cc |
| 行段 | L121-L133 |
| 特性 | std::scoped_lock |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-25 |
| 测试代码 | 否 |
| 发现方式 | tree-sitter |
用法¶
在并行循环中按符号加锁,保护多字段的一致性更新
为什么典型¶
sym.file、origin、value 与 sym_idx 必须一起更新;scoped_lock 让检查与写入处于同一临界区,离开 if 块即自动解锁。
摘录¶
if (!esym.is_undef())
continue;
std::scoped_lock lock(sym.mu);
if (sym.file &&
(!sym.esym().is_undef() || sym.file->priority <= file->priority))
continue;
sym.file = file;
sym.origin = 0;
sym.value = 0;
sym.sym_idx = i;
备注¶
生产路径;锁粒度是单个 Symbol,避免把整个并行循环串行化。