在unlock()
上调用boost::recursive_mutex::scoped_lock
之后,锁定对象会在其析构函数中以某种方式引用互斥锁吗?
在解锁调用后,锁仍然保留对互斥锁的引用(即。mutex()
返回相同的指针)。在锁定超出范围之前销毁互斥锁的情况下,还必须在锁上调用release()
吗?
答案 0 :(得分:1)
查看Boost 1.42中的unique_lock析构函数的代码:
~unique_lock()
{
if(owns_lock())
{
m->unlock();
}
}
如果它拥有锁,它只会尝试取消引用指向你的(现在无效)互斥锁的指针。如果您已经在此scoped_lock上调用了unlock,那么它不应该导致您在此实现中出现问题(尽管不太可能,但在将来的库版本中可能会更改)。
但是,最佳做法是确保按顺序销毁对象,以便在依赖对象之前销毁依赖对象。如果你不能保证这一点,正如你正确地说,你应该在锁定之前调用release(),然后再销毁互斥锁。