1

调用unlock()a后boost::recursive_mutex::scoped_lock,锁对象会在其析构函数中以某种方式引用互斥锁吗?

在调用解锁后,锁仍然保留对互斥锁的引用(即mutex()返回相同的指针)。release()如果互斥体在锁超出范围之前被销毁,还必须在锁上调用吗?

4

1 回答 1

1

查看 Boost 1.42 中 unique_lock 析构函数的代码:

    ~unique_lock()
    {
        if(owns_lock())
        {
            m->unlock();
        }
    }

如果它拥有锁,它只会尝试取消引用指向您的(现在无效的)互斥锁的指针。如果你已经在这个 scoped_lock 上调用了 unlock,那么它不应该在这个实现中给你带来问题(虽然不太可能,但在库的未来版本中可能会改变)。

但是,最佳实践是确保您的对象按顺序销毁,以便依赖对象在其依赖项之前被销毁。如果您不能保证这一点,那么正如您所说的那样,您应该在销毁互斥锁​​之前调用锁上的 release() 。

于 2011-03-11T15:20:15.920 回答