diff --git a/src/storage/buffer_pool_manager.cpp b/src/storage/buffer_pool_manager.cpp
index 17a4613a979816147e6b88a046b2b337a63abdfd..24035151fcb42b5d19a7ed2df94806a10334f118 100644
--- a/src/storage/buffer_pool_manager.cpp
+++ b/src/storage/buffer_pool_manager.cpp
@@ -65,13 +65,12 @@ Page* BufferPoolManager::fetch_page(PageId page_id) {
     // 1.2    否则,尝试调用find_victim_page获得一个可用的frame,若失败则返回nullptr
     frame_id_t frame_id;
     
-    latch_.lock();
+    std::scoped_lock lock{latch_};
     if(page_table_.find(page_id) != page_table_.end()){
         frame_id = page_table_[page_id];
         Page& page_des = pages_[frame_id];
         page_des.pin_count_++;
         replacer_->pin(frame_id);
-        latch_.unlock();
         return  &page_des;
     }
     frame_id = -1;
@@ -103,19 +102,17 @@ Page* BufferPoolManager::fetch_page(PageId page_id) {
 bool BufferPoolManager::unpin_page(PageId page_id, bool is_dirty) {
     // Todo:
     // 0. lock latch
-    latch_.lock();
+    std::scoped_lock lock{latch_};;
     // 1. 尝试在page_table_中搜寻page_id对应的页P
     auto it = page_table_.find(page_id);
     // 1.1 P在页表中不存在 return false
     if(it == page_table_.end()){
-        latch_.unlock();
         return false;
     }
     // 1.2 P在页表中存在,获取其pin_count_
     frame_id_t frame_id = it -> second;
     // 2.1 若pin_count_已经等于0,则返回false
     if(pages_[frame_id].pin_count_ == 0){
-        latch_.unlock();
         return false;
     }
     // 2.2 若pin_count_大于0,则pin_count_自减一
@@ -128,7 +125,6 @@ bool BufferPoolManager::unpin_page(PageId page_id, bool is_dirty) {
     if(is_dirty){
         pages_[frame_id].is_dirty_ = true;
     }
-    latch_.unlock();
     return true;
 }
 
@@ -140,7 +136,7 @@ bool BufferPoolManager::unpin_page(PageId page_id, bool is_dirty) {
 bool BufferPoolManager::flush_page(PageId page_id) {
     // Todo:
     // 0. lock latch
-    latch_.lock();
+    std::scoped_lock lock{latch_};;
     // 1. 查找页表,尝试获取目标页P
     auto it = page_table_.find(page_id);
     // 1.1 目标页P没有被page_table_记录 ,返回false
@@ -153,7 +149,6 @@ bool BufferPoolManager::flush_page(PageId page_id) {
     disk_manager_->write_page(page_id.fd,page_id.page_no,pages_[frame_id].data_,PAGE_SIZE);
     // 3. 更新P的is_dirty_
     pages_[frame_id].is_dirty_ = false;
-    latch_.unlock();
     return true;
 }
 
@@ -165,7 +160,7 @@ bool BufferPoolManager::flush_page(PageId page_id) {
 Page* BufferPoolManager::new_page(PageId* page_id) {
     // 1.   获得一个可用的frame,若无法获得则返回nullptr
     frame_id_t frame_id = -1;
-    latch_.lock();
+    std::scoped_lock lock{latch_};;
     if(!find_victim_page(&frame_id)){
         latch_.unlock();
         return nullptr;
@@ -190,7 +185,7 @@ Page* BufferPoolManager::new_page(PageId* page_id) {
  */
 bool BufferPoolManager::delete_page(PageId page_id) {
     // 1.   在page_table_中查找目标页,若不存在返回true
-    latch_.lock();
+    std::scoped_lock lock{latch_};;
     auto it = page_table_.find(page_id);
     if(it == page_table_.end()){
         latch_.unlock();
@@ -219,7 +214,7 @@ bool BufferPoolManager::delete_page(PageId page_id) {
  * @param {int} fd 文件句柄
  */
 void BufferPoolManager::flush_all_pages(int fd) {
-    for(frame_id_t frame_id = 0;frame_id < pool_size_;frame_id++)
+    for(size_t frame_id = 0;frame_id < pool_size_;frame_id++)
     {
         if(pages_[frame_id].id_.fd == fd && pages_[frame_id].id_.page_no != INVALID_PAGE_ID)
         flush_page(pages_[frame_id].id_);