c++ 返回std::move(unique_lock〈>)

3htmauhk  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(143)

当我读《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();
    }

提前感谢任何帮助!!

fv2wmkja

fv2wmkja1#

wait_for_data()中,unique_lockmutex(head_mutex)构造。然后在do()中,unique_lockunique_lockrvalue构造,wait_for_data()返回。因此,在do()中,实际上使用的unique_lockwait_for_data()创建的unique_lock相同。

相关问题