c++ - 如果 unique_lock 在其生命周期内不再使用,是否应该在解锁后释放?

标签 c++ multithreading c++11 mutex

我正在使用 std::mutex 在函数的开头复制 std::shared_ptr

// Lock the mutex
unique_lock<mutex> guard(d_mutex);

// Copy a shared_ptr
auto ptr = d_ptr;

// Unlock the mutex
guard.unlock();

// Operate with local ptr copy

在操作期间,守卫保持与 d_mutex 的关联。

我的问题是:除了 unlock() 之外,还有什么理由 release() 守卫?

最佳答案

成员函数 std::unique_lock::release 的目的是能够将 lock 的所有权转移到其他地方。它类似于成员函数 std::unique_ptr::release,它将 指针 的所有权(即释放内存的责任)转移给其他代码。

这意味着:不,在 std::unique_lock 解锁后不需要释放

顺便说一下:如果您只需要保护对 std::shared_ptr 的并发访问,那么您应该看一下 原子操作 std::shared_ptr:

Clang 3.5 已经支持这些操作,尽管实现不是无锁。 GCC 4.8 根本不支持这些操作。

关于c++ - 如果 unique_lock 在其生命周期内不再使用,是否应该在解锁后释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22590886/

相关文章:

c++ - 有人可以解释关于异常的右值引用吗?

c++ - 作为函数参数的字符串对的 C++ vector 的默认规范在 gcc-4.1.2 上无效?

c++ - 检查数字作为 ICU 代码点的有效性

安卓错误 : Only the original thread that created a view hierarchy can touch its views

c++ - 使用 libpng 将位图缓冲区快速编码为 png

c++ - 左值绑定(bind)到右值引用

c++ - 使用 C++ 的 OpenGL 中的动画点?

C++ ListControl - 图标位置

java - 为了获得最大性能,线程池的大小应该是多少?

c++ - 一个偶尔的作家,多个 std::map 的常客