c++ - mutex.lock 与 unique_lock

标签 c++ concurrency locking mutex

什么时候我应该更喜欢第一段代码而不是第二段,它们是否有根本区别

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/

相关文章:

c++ - 如何创建容器和类型都是参数的模板函数?

c++ - 如何在 C 中使用 char *

c++ - 来自 boost::asio::async_write 的 WriteHandler 在连接断开时无法正常工作(防火墙/手动断开网络连接)

c# - 两个线程/任务同时调用同一函数的机会

postgresql - 使用 psycopg2 使用 ACCESS EXCLUSIVE 锁定表

c# - .NET 中对象的锁定层次结构

c++ - Libcurl C++ "undefined reference to"(Windows/MinGW/g++)

java - Thread.interrupt 返回 false

java - 通过 Java 静态方法写入 log4j2 日志时包括 ThreadContext - 线程安全吗?

java - 1 java内存刷新 volatile : A good programdesign?