いくつかの「ブロック」で構成されるデータ構造があります。ブロックごとにミューテックスがあります。データ構造全体をロックし、このロックを呼び出し元の関数に移動するメソッドを実装したいと考えています。これが私のコードです:
std::vector<std::unique_lock<boost::shared_mutex>> lock_array()
{
std::vector<std::unique_lock<boost::shared_mutex>> locks;
for(size_t block = 0; block < BLOCK_COUNT; ++block)
{
locks.push_back(std::unique_lock<boost::shared_mutex>(mutexes[block]));
}
return std::move(locks);
}
そのような方法で呼び出した場合、アレイは引き続きロックされますか?
void some_method()
{
auto locks = lock_array();
...
}