我正在使用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
。
我的问题是:release()
除了unlock()
之外,还有{{1}}警卫的理由吗?
答案 0 :(得分:2)
成员函数std::unique_lock::release
的目的是能够将 lock 的所有权转移到其他地方。它类似于成员函数std::unique_ptr::release
,它将指针的所有权(即释放内存的责任)转移到其他代码。
这意味着:不,在解锁后释放 std::unique_lock
就不需要了。
顺便说一下:如果你只需要保护对std::shared_ptr
的并发访问,那么你应该看一下std::shared_ptr
的原子操作:
Clang 3.5已经支持这些操作,但实现不是无锁。 GCC 4.8根本不支持这些操作。