没有线程安全开销的QSharedPointer?

3

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

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


我认为你无法避免这个问题。即使是boost和C++11也会这样做。至少对底层指针的访问不是线程安全的,因此可以解决大部分开销。 - NathanOliver
6
不是特别昂贵。就系统操作和/或CPU命令而言,确实比不做这些要花费更多的时间……但与应用程序的其他活动相比,它通常很少以任何显著的方式出现在性能概况中。 - Edward Strange
1
我想补充一下,它不仅便宜,而且之所以便宜是因为它不进行任何锁定。它只涉及原子增量/减量指令,这些指令非常快速。当然比非原子操作慢,但并不是那么慢。如果使用互斥锁,那么它可能会很昂贵,但它没有使用。如果您有一些非常复杂的算法经常使用该指针,您可以随时查询内部指针,将其保存在本地变量中,并在嵌套循环中使用它。 - Sergei Tachenov
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Kuba hasn't forgotten Monica
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - sashoalm
显示剩余5条评论
1个回答

0

Qt 5拥有非常巧妙的QMutex类实现。在单线程应用程序中,它不得使用操作系统的同步原语。因此,我认为使用Qt的智能指针是一个好的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接