我何时应该选择第一段代码而不是第二段代码,它们之间有根本区别吗?

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基本上是一个没有锁和解锁功能的unique_lock,但是我很难区分一个互斥锁和一个使用互斥锁的锁。

最佳答案

是的,std::unique_lock调用在其析构函数中的互斥锁上解锁。

这样做的好处是,如果抛出某些异常,则可以确保互斥锁在离开定义std::unique_lock的范围时会解锁。

10-08 02:23