始终在删除之前释放QSemaphore?

时间:2012-01-31 11:05:45

标签: c++ qt semaphore

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

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

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

编辑:内存泄漏实际上是在所有对象被销毁之前放置的内存转储功能的结果。添加额外范围{ ... }有助于此。不过,我的问题仍然存在。

1 个答案:

答案 0 :(得分:2)

我认为您不需要在销毁之前发布信号量,因为release()只添加了指定数量的资源(又名许可< / em>)到信号量。如果您查看QSemaphore的示例,您会发现release()可以增加超出初始金额的可用许可数。

该文档说的是没有线程应该操作与被破坏的信号量。换句话说,所有线程都应该完成对信号量对象方法的调用,无论它们是什么,然后才能被安全地销毁。班级本身也不支持这个;它的唯一应用责任是通过外部手段确保这一点。实际上,在多线程编程中常见的情况是,对仍在使用的对象(甚至是同步对象)的破坏是不安全的。