跳转至

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,避免把整个并行循环串行化。

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