CMU15-455 PROJECT #1 - BUFFER POOL 修改實現

完成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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章