Рекомендуемые практики для повторного ввода кода в C, C ++ - PullRequest
7 голосов
/ 13 июля 2010

Я просматривал руководство по повторному входу о рекомендуемых методах при написании кода повторного входа.

Какие другие ссылки и ресурсы охватывают эту тему?

ЧтоДля проверки этих проблем можно использовать подобные инструментам

Ответы [ 4 ]

2 голосов
/ 14 июля 2010
  • Используйте локальные переменные.
  • Не используйте статические локальные или глобальные переменные, даже TLS не поможет вам с рекурсией / повторным входом.
  • Восстановите все ваши инварианты перед выполнениемобратные вызовы.
  • Не удерживайте блокировки, пока выполняете обратные вызовы.Если вам абсолютно необходимо (и я все равно буду искать способ избежать этого), убедитесь, что вы знаете, что произойдет, если вы попытаетесь повторно ввести блокировку в потоке, в котором она уже содержится.Как минимум, вы должны проверить это, иначе в зависимости от блокировки вы получите взаимоблокировки или сломанные инварианты (например, повреждение).
1 голос
/ 13 июля 2010

Нет, правда.Написание кода без повторного ввода обычно сложнее, чем повторный ввод.Просто следуйте этим простым рекомендациям и не пытайтесь делать что-то слишком бредовое, и все будет в порядке.

Неповторяющийся код обычно пишется для высокопроизводительных проблем.

0 голосов
/ 09 октября 2014
  1. Повторяемая функция не может использовать переменные неатомарным способом, если они не хранятся в стеке вызывающей задачи или являются частными переменными этой задачи.
  2. Реентерируемая функция не может вызывать другие функции, которые не реентерабельны.
  3. Функция повторного входа не может использовать аппаратное обеспечение неатомарным способом.

Ссылка: стр. 462 [ВВЕДЕНИЕ, ИСПОЛЬЗУЯ RENESAS RX62N MICROCONTROLLER] [Джеймс М. Конрад]

0 голосов
/ 14 июля 2010

Гид достаточно.

Мое личное правило - только 2 для повторного ввода кода:

  1. принимать только параметры передачи по значению, в качестве параметров в функции используются только значения.

  2. если мне нужно использовать какие-либо глобальные параметры или указатель (для производительности или для хранения), используйте мьютекс или семафор для управления доступом к нему.

...