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;
备注¶
生产路径;两次查找分别位于共享锁与独占锁下,是典型的“先乐观读、后加写锁复核”结构。