【问题标题】:Qt documentation and reentrancyQt 文档和可重入性
【发布时间】:2014-03-20 13:52:54
【问题描述】:

Qt 文档states this about thread-safety and reentrancy:

注意:仅当 Qt 类打算由多个线程使用时,它们才被记录为线程安全的。如果函数未标记为线程安全或可重入,则不应从不同的线程中使用它。如果一个类未标记为线程安全或可重入,则不应从不同线程访问该类的特定实例。

这似乎表明 Qt 中的每个函数和类都应该被认为是不可重入和非线程安全的,除非明确说明。

然而,在QRectQPoint 的文档中,例如,没有提到线程安全和重入,但我很难相信它们没有。事实上,this old discussion 在文档中说它是“缺乏”:

这些类只是普通数据(一些原语),没有共享的结构化或静态数据,因此它们是可重入的。我们的文档中没有将它们标记为此类。

那么,我们应该如何知道一个函数是否是可重入的?是否仅在简单类中省略了重入注释?

【问题讨论】:

  • 明显与否,文档在这里相互矛盾。可能值得提交错误报告。
  • @thuga Done! 不知道有没有办法把所有缺少reentrancy note的类都编一个list,看看有没有其他明显的错误。
  • QPointer 似乎是一个。

标签: c++ qt reentrancy


【解决方案1】:

我认为这个问题的唯一安全答案是查看源代码。显然 Qt 文档是不够的。对于每个未记录的可重入类,应向 Qt 提交错误。

根据 Qt 对可重入的定义,判断一个 Qt 类是否可重入有两个标准:

  1. 它没有静态数据。
  2. 它只调用其他可重入类的可重入函数和方法。

访问单例类会违反 2.

【讨论】:

  • 或者他们应该更改文本以说明未标记为可重入的类可能是任何一种方式:) 他们可能错过了与线程安全不同的是,类几乎默认情况下是可重入的。
猜你喜欢
  • 2020-05-27
  • 2011-03-04
  • 1970-01-01
  • 2015-05-24
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多