据我了解,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类是通用的互斥锁所有权包装器,允许延迟锁定,受时间限制的锁定尝试,递归锁定,锁定所有权的转移以及与条件变量一起使用。

10-04 14:54
查看更多