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
显式转移到外部实体(可引用锁定参数)的情况下,它有很好的用途
这个具体的例子是典型的用法:将锁定状态的所有权从一个对象(甚至是类型)转移到另一个对象。旁白:在这种情况下,您需要的是一个锁定保护装置,而不是唯一的锁定装置。