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

时间:2016-10-29 17:13:12

标签: c++ c++11 mutex

根据我的理解,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的示例。

1 个答案:

答案 0 :(得分:3)

是的,这正是它的用途,以及为什么要使用它。

除了你给出的简单例子之外,它确实是 little ;特别是与时间相关的东西在你自己实现时会很复杂,但你可以这样做。但最终,是的,它是一个包装。

来自cppreference on unique_lock

  

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