如何使用带锁的lambda捕获?

时间:2016-03-23 03:12:03

标签: c++11

在下面的代码中,成员变量(match_room_list_)是共享资源。所以我使用了互斥锁。

但锁定让我困惑。

我应该在内部lambda函数中使用lock吗?

void room::join_room(int user_id) 
{
   std::lock_guard<std::recursive_mutex> lock(mutex_);
   std::shared_ptr<match_room> find_room = nullptr;

   for (auto iter : match_room_list_)
   {
      if (false == iter.second->is_public_room())
      {
            continue;
      }

      if (true == iter.second->is_full())
      {
            continue;
      }

      find_room = iter.second;
      break;
   }

   // Something

   // async ( other thread call this lambda function )
   // call database
   database_manager::get_instance().join_room(find_room->get_room_id(), user_id, [=](bool success, std::string room_id, std::vector<int> user_id_list)
   {  
      // How do you think I should using lock? 
      // std::lock_guard<std::recursive_mutex> lock(mutex_);

      // shared resource
      match_room_list_[room_id].join_user(user_id); 

      response_join_room_ntf(room_id, user_id_list);
   }
}

0 个答案:

没有答案