P0修复:构建模式改Release-O3 + B+树Latch Crabbing正确实现
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条数据完整恢复