【发布时间】:2019-11-24 23:34:16
【问题描述】:
std::conditional_variable_any 的实现需要(在 gcc 和 clang 中)一个 std::shared_ptr。
在wait 方法中,互斥体的生命周期将扩展到本地范围。
template<typename _Lock>
void
wait(_Lock& __lock)
{
shared_ptr<mutex> __mutex = _M_mutex; // <-- Extend lifetime of mutex.
unique_lock<mutex> __my_lock(*__mutex);
_Unlock<_Lock> __unlock(__lock);
// *__mutex must be unlocked before re-locking __lock so move
// ownership of *__mutex lock to an object with shorter lifetime.
unique_lock<mutex> __my_lock2(std::move(__my_lock));
_M_cond.wait(__my_lock2);
}
我想知道,为什么我们需要这个?只要conditional_variable_any 对象存在,互斥体就存在。一个 std::mutex 还不够吗?
【问题讨论】:
标签: c++ multithreading mutex resource-management