据我了解,std::unique_lock
是一种围绕基础mutex
对象的包装程序,目的是提供比使用原始mutex
es更安全的实现(例如,如果引发异常或发生异常,则最终处于未锁定状态)破坏)。这是std::unique_lock
的全部吗?
尝试#1
std::mutex m; // global
void foo() {
m.lock();
// critical section
m.unlock();
}
尝试#2
std::mutex m; // global
void foo() {
std::unique_lock<std::mutex> ul(m);
// critical section
}
是尝试2而不是尝试1,这是
std::unique_lock
的目的吗?请提供其他可能需要std::unique_lock
的示例。 最佳答案
是的,这就是它的用途,以及为什么要使用它。
它确实超出了您给出的简单示例;与时间相关的内容尤其难以自行实现,但是您可以做到。最终,是的,它是一个包装器。
从cppreference on unique_lock
:
unique_lock
类是通用的互斥锁所有权包装器,允许延迟锁定,受时间限制的锁定尝试,递归锁定,锁定所有权的转移以及与条件变量一起使用。