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;
}
备注¶
生产路径;注释直接说明目的是减少锁竞争,适合作为“锁外计算 + 锁内拷贝”的示例。