根据我的理解,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
的示例。
答案 0 :(得分:3)
是的,这正是它的用途,以及为什么要使用它。
除了你给出的简单例子之外,它确实是 little ;特别是与时间相关的东西在你自己实现时会很复杂,但你可以这样做。但最终,是的,它是一个包装。
来自cppreference on unique_lock
:
类
unique_lock
是一个通用的互斥锁所有权包装器,允许延迟锁定,时间限制的锁定尝试,递归锁定,锁定所有权的转移以及条件变量的使用。