CMU 15-445/645 PROJECT #1 - BUFFER POOL(思路介绍)

1. Part 1是实现一个LRU,按照C++ STL list + unordered_map 的思路实现,根据描述实现对应的API,可能后面需要考虑一些线程安全的问题。

成员变量设计

 private:
  std::unordered_map<frame_id_t, std::list<frame_id_t>::iterator> _hashmap;
  std::list<frame_id_t> _list;
  int max_num_pages;
  int size;
namespace bustub {

LRUReplacer::LRUReplacer(size_t num_pages):max_num_pages(num_pages),
size(0){

}

LRUReplacer::~LRUReplacer() = default;

bool LRUReplacer::Victim(frame_id_t *frame_id) {
  if(size == 0){
    return false;
  }
  *frame_id = _list.back();
  auto tmp = _hashmap[*frame_id];
  _hashmap.erase(*frame_id);
  _list.erase(tmp);
  size--;
  return true;
}

void LRUReplacer::Pin(frame_id_t frame_id) {
  if(_hashmap.find(frame_id) != _hashmap.end()){
    auto tmp = _hashmap[frame_id];
    _hashmap.erase(frame_id);
    _list.erase(tmp);
    size--;
  }
}

void LRUReplacer::Unpin(frame_id_t frame_id) {
  if(size >= max_num_pages ||
      _hashmap.find(frame_id) != _hashmap.end()){
    return;
  }
  _list.push_front(frame_id);
  _hashmap[frame_id] = _list.begin();
  size++;
}

size_t LRUReplacer::Size() { return size; }

}  // namespace bustub

2. Part2 是实现BU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值