C++ std::unique\u lock::release的用例是什么?

C++ std::unique\u lock::release的用例是什么?,c++,multithreading,c++11,locking,C++,Multithreading,C++11,Locking,在什么情况下可以使用std::unique_lock的release方法? 我犯了使用release方法而不是unlock方法的错误,花了一段时间才理解为什么下面的代码不起作用 #include <mutex> #include <iostream> #include <vector> #include <thread> #include <chrono> std::mutex mtx; void foo() { s

在什么情况下可以使用
std::unique_lock
release
方法? 我犯了使用
release
方法而不是
unlock
方法的错误,花了一段时间才理解为什么下面的代码不起作用

#include <mutex>
#include <iostream>
#include <vector>
#include <thread>
#include <chrono>

std::mutex mtx;

void foo()
{    
    std::unique_lock<std::mutex> lock(mtx);
    std::cout << "in critical section\n";
    std::this_thread::sleep_for(std::chrono::seconds(1));
    lock.release();
}

int main()
{
    std::vector<std::thread> threads;
    for (int i = 0; i < 5; ++i)
        threads.push_back(std::thread(foo));

    for (std::thread& t : threads)
        t.join();
}
#包括
#包括
#包括
#包括
#包括
std::互斥mtx;
void foo()
{    
std::唯一锁(mtx);

std::cout
.release()
在您希望将互斥锁保持在锁定状态直到其他对象/代码决定将其解锁时非常有用…例如,如果您正在调用一个需要锁定互斥锁的函数,并且在该函数的处理过程中的某个点将其自身解锁,该函数只接受
std::mutex&
而不是
std::unique_lock&&
(概念上类似于智能指针释放函数的用法)。

在锁定状态的所有权从本地函数
unique_lock
显式转移到外部实体(可引用锁定参数)的情况下,它有很好的用途


这个具体的例子是典型的用法:将锁定状态的所有权从一个对象(甚至是类型)转移到另一个对象。

旁白:在这种情况下,您需要的是一个
锁定保护装置,而不是
唯一的锁定装置。