【问题标题】:QSharedPointer without the thread-safety overhead?QSharedPointer 没有线程安全开销?
【发布时间】:2016-04-26 12:40:25
【问题描述】:

我需要使用QSharedPointer 来进行引用计数,但我将在单线程应用程序中使用它,因此我不想要线程安全开销(我认为这是相当昂贵的)。

有没有办法关闭线程安全,或者是否有一个仅提供引用计数的等效 Qt 类?如果没有,是否有不需要我包含诸如 boost 之类的大库或打开 c++11 的独立类?

【问题讨论】:

  • @NathanOliver 不幸的是,不是。来自文档:“QSharedDataPointer 实现线程安全引用计数”
  • 我认为您将无法摆脱这一点。甚至 boost 和 C++11 也能做到这一点。至少对底层指针的访问不是线程安全的,因此可以处理大部分开销。
  • 没那么贵。就系统操作和/或 CPU 命令而言,它们所花费的时间比不这样做要长得多……但与应用程序的其他活动相比,它通常很少会出现在配置文件中,因为它在任何情况下都具有重要意义无论如何。
  • 我想补充一点,它不仅便宜,而且便宜,因为它不做任何锁定。它只是关于非常快的原子增量/减量指令。当然,比非原子慢,但不是那么多。它使用互斥锁,那么它可能会很昂贵,但事实并非如此。如果你有一些非常复杂的算法经常使用这个指针,你总是可以查询内部指针,将它保存在一个局部变量中,然后在你疯狂的嵌套循环中使用它。

标签: c++ qt qsharedpointer


【解决方案1】:

Qt 5 有very clever realization of class QMutex。并且不能在单线程应用程序中使用 OS 的 Synchronization Primitives。所以,我认为使用 Qt 的智能指针是一个很好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2012-02-17
    • 2012-10-20
    相关资源
    最近更新 更多