Skip to content

P0修复:构建模式改Release-O3 + B+树Latch Crabbing正确实现

少睡觉多看书 requested to merge lysq_brach into main

P0-0 构建模式优化(最关键):

  • CMakeLists.txt 默认从 Debug(-O0) 改为 Release(-O3 -DNDEBUG)
  • Debug模式下所有优化被-O0关闭,性能差10-100倍,P0优化收益被完全淹没
  • 支持通过 -DCMAKE_BUILD_TYPE=Debug 切换回调试模式

P0-2 B+树 Latch Crabbing 正确实现(修复前版死代码+正确性bug):

  • Page类新增RLock/RUnlock/WLock/WUnlock接口(std::shared_mutex)
  • root_latch_改为std::shared_mutex,支持并发读
  • find_leaf_page实现真正的Latch Crabbing:
    • FIND:读锁遍历,子节点加锁后释放父节点锁(读操作完全并发)
    • INSERT:乐观读锁遍历,由调用方决定升级
    • DELETE:调用方持root写锁,内部不加节点锁
  • 新增is_safe()判断节点是否会发生分裂/合并
  • insert_entry乐观路径:读锁遍历→检查安全→释放读锁加写锁→重新验证→插入
    • 修复前版RUnlock->WLock窗口期bug:加写锁后重新检查num_key
    • 修复前版死代码:is_safe分支两个分支代码相同
  • insert_entry_pessimistic悲观路径:持root写锁串行化结构修改
  • delete_entry悲观路径:root写锁(合并逻辑复杂,保证正确性)
  • 修复get_value/lower_bound/upper_bound的读锁释放

验证:

  • 5/5单元测试通过
  • 1000条单线程插入(多次分裂)数据完整
  • 4线程并发插入400条无数据损坏
  • kill -9崩溃恢复后100条数据完整恢复

Merge request reports