ev-mold-scoped-lock-parallel-export-003¶
| 字段 | 值 |
|---|---|
| 项目 | rui314/mold |
| 固定 commit | 27162691b71a |
| 路径 | src/passes.cc |
| 行段 | L1947-L1955 |
| 特性 | std::scoped_lock |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-25 |
| 测试代码 | 否 |
| 发现方式 | tree-sitter |
用法¶
在 tbb::parallel_for_each 的任务体内用 scoped_lock 保护共享符号状态
为什么典型¶
并行算法不改变数据竞争规则;对每个 Symbol 单独加锁,使批量导出标记可以安全并发执行。
摘录¶
tbb::parallel_for_each(ctx.dsos, [&](SharedFile<E> *file) {
for (Symbol<E> *sym : file->symbols) {
if (sym->file && !sym->file->is_dso && sym->visibility != STV_HIDDEN &&
sym->ver_idx != VER_NDX_LOCAL) {
std::scoped_lock lock(sym->mu);
sym->is_exported = true;
}
}
});
备注¶
生产路径;锁在条件判断内部才获取,未命中的符号不产生同步开销。