在看《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();
}
提前感谢您的帮助!!
In
wait_for_data()
unique_lock
从 mutex
(head_mutex) 构造。然后在do()
unique_lock
由 unique_lock
rvalue
构造,wait_for_data()
返回。所以在do()
中你实际上使用了与unique_lock
创建的相同的wait_for_data()
。