gpt4 book ai didi

c++ - boost::recursive_mutex::scoped_locks 析构函数会引用未锁定的互斥量吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:42 28 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

关于c++ - boost::recursive_mutex::scoped_locks 析构函数会引用未锁定的互斥量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5271885/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com