跳转至

ev-mold-shared-mutex-output-section-001

字段 值
项目 rui314/mold
固定 commit 27162691b71a
路径 src/output-chunks.cc
行段 L2075-L2089
特性 std::shared_mutex
许可证 MIT
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-10-25
测试代码 否
发现方式 tree-sitter

用法

读路径用 shared_lock 快速命中,未命中再升级为 unique_lock 创建并二次检查

为什么典型

输出段查找是读多写少;共享锁允许并发查找,创建路径改用独占锁,并在拿到独占锁后重新查找,避免重复插入。

摘录

  static std::shared_mutex mu;
  {
    std::shared_lock lock(mu);
    if (MergedSection *osec = find())
      return osec;
  }

  // Create a new output section.
  std::unique_lock lock(mu);
  if (MergedSection *osec = find())
    return osec;

  MergedSection *osec = new MergedSection(name, flags, shdr.sh_type, entsize);
  ctx.merged_sections.emplace_back(osec);
  return osec;

备注

生产路径;两次查找分别位于共享锁与独占锁下,是典型的“先乐观读、后加写锁复核”结构。

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