当我读《C++ in concurrent》这本书时,我看到了关于返回std::move(unique_lock<>)
的代码,例如:
std::unique_lock<std::mutex> wait_for_data()
{
std::unique_lock<std::mutex> head_lock(head_mutex);
data_cond.wait(head_lock,[&]{return head!=get_tail();});
return std::move(head_lock);
}
std::unique_ptr<node> do()
{
std::unique_lock<std::mutex> head_lock(wait_for_data());
return pop_head();
}
是否有两个锁和两个解锁?是否与下一个只有一个锁和解锁的例子相同?返回unique_lock<>
是什么意思?
std::unique_ptr<node> do()
{
std::unique_lock<std::mutex> head_lock(head_mutex);
data_cond.wait(head_lock,[&]{return head!=get_tail();});
return pop_head();
}
提前感谢任何帮助!!
1条答案
按热度按时间fv2wmkja1#
在
wait_for_data()
中,unique_lock
由mutex
(head_mutex)构造。然后在do()
中,unique_lock
由unique_lock
rvalue
构造,wait_for_data()
返回。因此,在do()
中,实际上使用的unique_lock
与wait_for_data()
创建的unique_lock
相同。