关于std::unique_lock我应该知道些什么?

What all should I know about std::unique_lock?

本文关键字:什么 lock std unique 关于 我应该      更新时间:2023-10-16

据我所知,std::unique_lock是围绕底层mutex对象的一种包装器,以便提供比使用原始mutex对象更安全的实现(例如,如果抛出异常或销毁,最终处于解锁状态)。这就是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的例子

是的,这正是它的作用,也是你应该使用它的原因。

它确实比你给出的简单例子有一点;特别是与时间相关的东西,你自己实现起来会很复杂,但是你可以做到。最终,是的,它是一个包装器。

From cppreference on unique_lock:

unique_lock类是一个通用的互斥锁所有权包装器,允许延迟锁定、时间约束的锁定尝试、递归锁定、锁所有权的转移以及与条件变量一起使用。