gpt4 book ai didi

c++ - move std::vector 的 std::unique_locks

转载 作者:行者123 更新时间:2023-11-27 23:14:10 25 4
gpt4 key购买 nike

我有一个由几个“ block ”组成的数据结构。对于每个 block ,我都有互斥锁。我想实现一个锁定整个数据结构的方法并将此锁定 move 到调用函数。这是我的代码:

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();
...
}

最佳答案

是的。 move unique_lock 将保留锁, move vector 根本不会影响锁。你可以验证这一点:

void some_method()
{
auto locks = lock_array();
for (auto const & lock : locks) {
assert(lock.owns_lock());
}
}

此外,请注意返回时不需要std::move;返回值无论如何都会被 move (除非 move 被省略)。

关于c++ - move std::vector 的 std::unique_locks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com