Подтвердить что ты не робот

Документация Qt и повторная регистрация

Документация Qt описывает это в отношении безопасности потоков и повторного размещения:

Примечание. Классы Qt документируются только как потокобезопасные, если они предназначены для использования несколькими потоками. Если функция не помечена как потокобезопасная или реентерабельная, ее нельзя использовать из разных потоков. Если класс не помечен как потокобезопасный или реентерабельный, то конкретный экземпляр этого класса не должен быть доступен из разных потоков.

Это, как представляется, означает, что каждая функция и класс в Qt должны считаться не реентерабельными и не потокобезопасными, если это явно не указано.

Однако в документации QRect и QPoint, например, не упоминается ни безопасность потока, ни повторное включение, но мне трудно поверить, что это не так. Фактически, эта старая дискуссия говорит о ее "недостатке" в документации:

Эти классы представляют собой простые данные (несколько примитивов), не имеют общих структурированных или статических данных, поэтому они являются реентерабельными. То, что они не помечены как таковые, является недостатком в нашей документации.

Итак, как нам узнать, является ли функция реентерабельной или нет? Является ли примечание о возвращении опущено только для простых классов, где это подразумевается по его очевидности?

4b9b3361

Ответ 1

Я думаю, что единственным безопасным ответом на этот вопрос является просмотр исходного кода. Очевидно, что документы Qt недостаточны. Ошибки должны быть поданы с Qt для каждого недокументированного реентерабельного класса.

По определению Qt reentrancy существуют два критерия для определения, является ли класс Qt реентерабельным:

  • У него нет статических данных.
  • Он вызывает только повторные функции и методы других классов реентера.

Доступ к классу singleton будет нарушен 2.