代码之家  ›  专栏  ›  技术社区  ›  brianegge

C++对象终止通知

  •  6
  • brianegge  · 技术社区  · 15 年前

    在C++程序中,我有两个引用计数对象: 国王 继承人 . 继承人需要封锁,直到国王被毁。King是一个引用计数对象,当其引用计数变为零时将被销毁。如果继承人持有对国王的引用,那么国王的引用计数将永远不会变为零。在国王被毁之前,怎样才能拥有继承人的领地?

    2 回复  |  直到 15 年前
        1
  •  10
  •   James McNellis    15 年前

    您可以使用非拥有(或“弱”)引用,类似于 how weak_ptr works .

    至于等待国王死,你可以使用一个沉默,国王可以持有,直到他死,并有继承座等待国王释放它。

    如果您需要有多个继承人等待,并且对继承人有一些排序,您可以有一个“继承人选择器”对象来跟踪继承人列表及其优先顺序,当国王释放互斥体时,它会将该互斥体的所有权分配给列表中的下一个继承人。

        2
  •  0
  •   brianegge    15 年前

    谢谢@james。以下是我最终采用的解决方案:

    互斥体方法似乎很有希望,但大多数互斥体都希望获取线程和释放线程是相同的。最后,我让继承者在堆栈上创建一个计数为零的信号量,将指向该信号量的指针传递给King,释放King,然后尝试获取该信号量。计数为零,因此继承人立即阻止。当调用King的析构函数时,它在信号量上调用“release”。这似乎对流氓波信号有效。