跳转至

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;
        }
      }
    });

备注

生产路径;锁在条件判断内部才获取,未命中的符号不产生同步开销。

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