2

在我正在调试的代码库中遇到了这个析构函数。

ManagerImpl::~ManagerImpl() {
    // don't go away if some thread is still hitting us
    boost::unique_lock<boost::mutex> l(m_mutex);
}

它实际上在多线程程序中有什么有用的用途吗?它看起来像kludge。

我假设这个想法是如果另一个线程正在调用一个锁定互斥锁的函数,则推迟销毁,但这样做是否有效?ElectricFence 段错误会让我不相信。

4

1 回答 1

4

它可能试图推迟销毁,直到另一个线程解锁互斥锁并离开另一个成员函数。

但是,这不会阻止另一个线程在析构函数中的锁被释放后再次调用该函数。

线程之间必须有更多的交互(您没有显示)才能使这段代码有意义。尽管如此,想想,这似乎不是健壮的代码。

于 2019-06-17T16:55:09.920 回答