什么时候我应该更喜欢第一段代码而不是第二段代码,它们有根本的区别吗?
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,但是我很难用互斥锁来区分互斥锁和锁。
发布于 2016-06-21 21:37:08
是的,std::unique_lock在其析构函数中调用互斥锁。
这样做的好处是,在抛出一些异常的情况下,您可以确保互斥锁将在离开定义std::unique_lock的作用域时解锁。
发布于 2016-06-21 21:55:00
这样想吧:
// 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
}https://stackoverflow.com/questions/37945859
复制相似问题