我正在寻找一些错误,我们有一些凌乱的线程/条件变量类被更新为使用C++ 11线程。在追捕过程中,我遇到的GCC代码库执行以下操作:GCC C++ 11条件变量等待内部
template<typename _Lock>
void
wait(_Lock& __lock)
{
unique_lock<mutex> __my_lock(_M_mutex);
_Unlock<_Lock> __unlock(__lock);
// _M_mutex must be unlocked before re-locking __lock so move
// ownership of _M_mutex lock to an object with shorter lifetime.
unique_lock<mutex> __my_lock2(std::move(__my_lock));
_M_cond.wait(__my_lock2);
}
尽管评论,我难以理解的举动构造的目的,在这里__my_lock2。为什么__my_lock在这里移动到__my_lock2?
我怀疑它与'__my_lock'析构函数在**'__unlock'之后被调用**有关,而'__my_lock2'将首先被销毁。它基本上是围绕FILO生命周期规则进行黑客攻击。 – pmdj