完成130/160, 还有两个测试未实现。
主要UnpinPageIml的实现
bool BufferPoolManager::UnpinPageImpl(page_id_t page_id, bool is_dirty) {
std::scoped_lock bpm_slk{latch_};
if(page_table_.find(page_id)==page_table_.end()){return false;}
auto frame_id = page_table_[page_id];
auto page = pages_ + frame_id;
if(page->pin_count_<0){return false;}
if(page->pin_count_>0) {
page->pin_count_--;
}
if(page->pin_count_==0){
replacer_->Unpin(frame_id);
}
page->is_dirty_ |= is_dirty;
return true;
}