Повторно входящие функции и как это выглядит?
Я на самом деле не понимаю повторно входящий код.
Может кто-нибудь показать мне алгоритм для повторного ввода кода, чтобы я мог посмотреть на него? Было бы неплохо объяснить, как это работает. Благодарю.
1 ответ
Если вы, как разработчик какой-либо функции, можете быть уверены, что ваша функция не вызывается во время ее выполнения, то вы можете не обращать внимания на ее повторное появление.
Однако, если ваша функция может быть вызвана из другой задачи, потоков или просто по сигналу прерывания, может возникнуть ситуация, когда функция повторно входит в себя во время своего выполнения, если она не соответствует требованиям к реентранту, не защищена от нескольких входов, это может привести к непредсказуемому поведению, такому как повреждение данных \ перезапись или искажение хронологии действий в функции.
Здесь может быть несколько подходов. Иногда достаточно написать функцию, например, работающую только с копиями внешних переменных. Однако иногда использование мьютексов неизбежно. Когда используются мьютексы, вызывающая функция будет ожидать разблокировки мьютекса. Вы просто устанавливаете блокировку мьютекса перед критической секцией, а разблокировку мьютекса - после критической секции. Целое тело функции может быть обернуто между парой блокировки и разблокировки.