Qt 文档陈述了关于线程安全和可重入性的内容 http://qt-project.org/doc/qt-5.0/qtcore/threads-reentrancy.html:
注意:Qt 类仅在供多个线程使用时才被记录为线程安全的。如果函数未标记为线程安全或可重入,则不应在不同线程中使用它。如果一个类未标记为线程安全或可重入,则不应从不同的线程访问该类的特定实例。
这似乎表明 Qt 中的每个函数和类都应被视为不可重入和非线程安全,除非明确声明。
然而,在文档中QRect
and QPoint
,例如,既没有提到线程安全也没有提到重入,但我很难相信它们没有提到。实际上,这个旧的讨论 http://www.archivum.info/qt4-preview-feedback@trolltech.com/2005-01/00485/Re-QRect-QPoint-reentrancy.html文档中说它是“缺乏”:
这些类只是普通数据(一些原语),没有共享的结构化或静态数据,因此它们是可重入的。我们的文档中缺少它们没有这样标记。
那么,我们如何知道一个函数是否可重入呢?重入注释是否仅针对其明显性所暗示的简单类而被省略?
我认为这个问题唯一安全的答案是查看源代码。显然 Qt 文档还不够。对于每个未记录的可重入类,应向 Qt 提交错误。
根据 Qt 对可重入性的定义,有两个标准来确定 Qt 类是否可重入:
- 它没有静态数据。
- 它仅调用其他可重入类的可重入函数和方法。
访问单例类会违反 2。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)