gpt4 book ai didi

c++ - 总是在删除之前释放一个 QSemaphore?

转载 作者:行者123 更新时间:2023-11-28 03:41:27 26 4
gpt4 key购买 nike

  • QSemaphore 是否需要在删除前释放?

  • 如果是,我应该在delete semaphore之前调用semaphore->release(n),但是我怎么知道有多少(n) 资源获取? (我知道有多少资源 available(),但不知道信号量的整体“大小”。)

我的问题的原因:我正在寻找内存泄漏并发现一个 QSemaphore 造成了内存泄漏,尽管 delete 被(似乎已经)调用了它。发生这种情况可能是因为它没有正确发布 - The doc说“警告:销毁正在使用的信号量可能会导致未定义的行为。

编辑:内存泄漏实际上是在所有对象被销毁之前放置的内存转储函数的结果。添加额外的作用域 { ... } 对此有所帮助。尽管如此,我的问题仍然存在。

最佳答案

我认为您不需要在销毁前释放一个信号量,因为release() 只是添加指定数量的资源(又名允许) 到信号量。如果查看 QSemaphore 的示例,您会发现 release() 可以将可用许可的数量增加到初始数量之外。

文档所说的是,任何线程都不应操作 正在销毁的信号量。换句话说,所有线程都应该完成对信号量对象方法的调用,无论这些方法是什么,然后才能安全地销毁它。而且类(class)本身对此没有支持;通过外部方式确保这一点完全是应用程序的责任。实际上,销毁仍在使用的对象(即使是同步对象)是不安全的,这是多线程编程中的常见情况。

关于c++ - 总是在删除之前释放一个 QSemaphore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9078446/

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