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

What all should I know about std::unique_lock?

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

The class unique_lock is a general-purpose mutex ownership wrapper allowing deferred locking, time-constrained attempts at locking, recursive locking, transfer of lock ownership, and use with condition variables.