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

时间:2014-03-23 12:26:33

标签: 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

相关联

我的问题是:release()除了unlock()之外,还有{{1}}警卫的理由吗?

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根本不支持这些操作。