跳转至

ev-mold-shared-mutex-thread-cache-002

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

用法

并行任务在 shared_lock 下复制共享映射,再在线程本地缓存上工作

为什么典型

小临界区只复制指针表,随后无锁查询线程本地副本;共享锁把写者互斥与读者并发结合起来,同时避免每节都抢锁。

摘录

  tbb::parallel_for_each(ctx.objs, [&](ObjectFile<E> *file) {
    // Make a per-thread cache of the main map to avoid lock contention.
    // It makes a noticeable difference if we have millions of input sections.
    MapType cache;
    {
      std::shared_lock lock(mu);
      cache = map;
    }

备注

生产路径;注释直接说明目的是减少锁竞争,适合作为“锁外计算 + 锁内拷贝”的示例。

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