什么时候我应该更喜欢第一段代码而不是第二段,它们是否有根本区别
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
在其析构函数中对互斥锁调用 unlock。
这样做的好处是,如果抛出一些异常,您可以确定互斥锁会在离开定义 std::unique_lock
的范围时解锁。
关于c++ - mutex.lock 与 unique_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37945859/