我正在尋找一些錯誤,我們有一些凌亂的線程/條件變量類被更新爲使用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