未验证 提交 758da12d 编写于 作者: L liu-jianhao 提交者: GitHub

Update README.md

上级 09a34a96
......@@ -65,3 +65,14 @@ Running main() from gmock_main.cc
## 任务二:并发索引
### 提示
+ 不能使用全局范围锁存器来保护你的数据结构,也就是说,无法锁定整个索引,只能在操作完成时解锁锁存器。
+ 提供了读写锁存器的实现`src/include/common/rwmutex.h`。并且已经在文件下添加了辅助函数来获取和释放`latch`(`src/include/page / page.h`)
+ 必须使用名为`transaction`的传入指针参数。它提供了在遍历B +树时存储已获取锁存页面的方法,以及存储在`Remove`操作期间删除的页面的方法。我们的建议是仔细查看`FindLeafPage()`B+树中的方法,你可能想改变以前的实现并在这个特定方法中添加`latch crabbing`的逻辑。
+ 缓冲池管理器中`FetchPage`的返回值是一个指向`Page`的实例`src/include/page/page.h`的指针。你可以获得一个Page的锁,但你不能获得B+Tree节点上的锁(既不是内部节点也不是叶子节点)
### 常见的问题
+ 仔细考虑`UnpinPage(page_id, is_dirty)`缓冲池管理器类中的`UnLock()`方法与页面类中的方法之间的顺序和关系。在从缓冲池取消固定同一页面之前,必须释放该页面上的锁存器。
+ 如果你正确地实现并发B+树索引,那么每个线程将始终从根到底获取锁存器。释放闩锁时,请确保遵循相同的顺序(也称为从根到下)以避免可能的死锁情况。
+ 其中一个例子是插入和删除时,成员变量`root_page_id(src/include/index/b_plus_tree.h)`也将被更新。您有责任防止此共享变量的并发更新(提示:在B +树索引中添加一个抽象层,您可以使用std::mutex来保护此变量)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册