Qt文档和可重入性

Qt documentation and reentrancy

本文关键字:文档 Qt      更新时间:2023-10-16

Qt文档说明了线程安全和可重入性:

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

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

然而,在QRectQPoint的文档中,例如,既没有提到线程安全性也没有提到可重入性,但我很难相信它们没有。事实上,这个旧的讨论说这是文档中的"缺失":

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

那么,我们如何知道一个函数是否可重入呢?重入说明是否仅在简单类中被省略,因为它的明显性暗示了它?

我认为这个问题的唯一安全答案是查看源代码。显然Qt文档是不够的。对于每个未记录的可重入类,应该将bug归档到Qt中。

根据Qt的可重入性定义,有两个标准来确定一个Qt类是否可重入:

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

访问单例类会违反2.