mutex.lock vs unique_lock

mutex.lock vs unique_lock

本文关键字:lock unique vs mutex      更新时间:2023-10-16

我应该何时更喜欢第二件代码,而它们具有根本差异

std::mutex mtx;
mtx.lock();
... //protected stuff
mtx.unlock();
... //non-protected stuff
mtx.lock();
... //etc

std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
... //protected stuff
lck.unlock();
... //non-protected stuff
lck.lock();
... //etc

我确实知道lock_guard基本上是一个唯一的_lock,而没有锁定功能,但是我很难使用互斥s区分互斥s和锁。

是的, std::unique_lock在其击路仪中的静音上呼叫解锁。

这样的好处是,如果抛出了一些例外,您确定静音在离开定义std::unique_lock的范围时会解锁。

以这种方式考虑:

// define a mutex
std::mutex mtx;

...稍后...

void something_safe()
{
  // code in these braces is a critical section
  {
    auto lock = std::unique_lock<std::mutex>(mtx); // equivalent to mtx.lock();
    ... //protected stuff
  }  // <---- however you leave this brace, equivalent to mtx.unlock();
  ... //non-protected stuff
}