Contents
project 1如何通过呢? 很奇怪, 提交了然后编译通过了但是就是测试不了, 每个测试都显示test not run
|
|
这次终于顺利将代码提交到了Gradescop, 但是测试没有通过, 好消息是有一部分通过了, 说明是代码实现出了一点问题, 想来改改还是可以过的.
执行命令将响应代码压缩为zip文件然后上传提交
|
|
不管是standalone还是parallel, 测试都止步于 FetchPage, 之前的测试都通过了, 而之后的都没有通过, 没有通过的如下
- Concurrency
- FetchPage
- DeletePage
- IsDirty
即使是最简单的LRUReplacer, 也有并发测试没有通过, 这个integrated叫做综合的, 应该通过了currency之后, 这个也能通过了
LRUReplacer类有三个临界区, 分别是: size_, frame_list_, frame_map_
, 他们可能伴随着并发的读写, 但是注意不要形成死锁.
然后真的形成死锁了, 原因是实现size()时unlock写到return之后了, 四不四傻.
|
|
然而这个测试还是没有通过, 并发那里是time out, 和没加锁前一样, 而且总分还从30变成20分了… 尴尬
将锁换成 scoped_lock 并且调整了锁的范围之后终于过了LRU的并发测试. scoped_lock 是我新学到的东西, 以前没学过, 发现知识还比较欠缺.
终于全部改好了!!!
一下几点是我之前失误的
- 没有加锁(预料之中过不了一些样例)
- 在UnpinPgImp中, 理解错了它 is_dirty 的意思, 以为是要flush脏页, 但其实是让我设置标志位
- 同样是在 UnpinPgImp中, 只对page->GetPinCount() == 0返回了true, 但其实count>0也需要返回true.
- FlushPgImp中执行正常情况时漏掉了 return true(太粗心)
Author 姬小野
LastMod 0001-01-01