Qt文档和重入

sas*_*alm 17 c++ qt reentrancy

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

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

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

但是,在文档中,QRect并且QPoint,例如,既没有提到线程安全性也没有提及重入性,但我发现很难相信它们不是.事实上,这个旧的讨论说它在文档中"缺乏":

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

那么,我们应该如何知道某个函数是否可以重入?重入笔记是否仅为简单类省略,其显而易见性暗示了它?

jco*_*and 2

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

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

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

访问单例类会违反 2。