调用unlock()
a后boost::recursive_mutex::scoped_lock
,锁对象会在其析构函数中以某种方式引用互斥锁吗?
在调用解锁后,锁仍然保留对互斥锁的引用(即mutex()
返回相同的指针)。release()
如果互斥体在锁超出范围之前被销毁,还必须在锁上调用吗?
调用unlock()
a后boost::recursive_mutex::scoped_lock
,锁对象会在其析构函数中以某种方式引用互斥锁吗?
在调用解锁后,锁仍然保留对互斥锁的引用(即mutex()
返回相同的指针)。release()
如果互斥体在锁超出范围之前被销毁,还必须在锁上调用吗?
查看 Boost 1.42 中 unique_lock 析构函数的代码:
~unique_lock()
{
if(owns_lock())
{
m->unlock();
}
}
如果它拥有锁,它只会尝试取消引用指向您的(现在无效的)互斥锁的指针。如果你已经在这个 scoped_lock 上调用了 unlock,那么它不应该在这个实现中给你带来问题(虽然不太可能,但在库的未来版本中可能会改变)。
但是,最佳实践是确保您的对象按顺序销毁,以便依赖对象在其依赖项之前被销毁。如果您不能保证这一点,那么正如您所说的那样,您应该在销毁互斥锁之前调用锁上的 release() 。