Функции, которые спроектированы, чтобы обеспечить операции на ресурсе, должны быть вызваны в соответствующей последовательности
Функции, которые спроектированы, чтобы обеспечить операции на ресурсе, должны быть вызваны в соответствующей последовательности.
Вы обычно используете функции, работающие с ресурсом следующим образом:
Вы выделяете ресурс.
Например, вы открываете файл или критический раздел.
Вы используете ресурс.
Например, вы читаете из файла или выполняете операции в критическом разделе.
Вы освобождаете ресурс.
Например, вы закрываете файл или критический раздел.
Для ваших функций, чтобы действовать, как вы ожидаете, выполните шаги в последовательности. Например, если вы вызываете функцию распределения ресурсов на определенном пути к выполнению, необходимо вызвать функцию освобождения на том пути.
Polyspace® Bug Finder™ обнаруживает нарушение этого правила, если вы задаете многозадачные опции, и ваш код содержит один из этих дефектов:
Missing lock
: Задача вызывает разблокировать функцию прежде, чем вызвать соответствующую функцию блокировки.
Missing unlock
: Задача вызывает функцию блокировки, но заканчивается без вызова соответствия, разблокировали функцию.
Double lock
: Задача вызывает функцию блокировки дважды без промежуточного вызова разблокировать функции.
Double unlock
: Задача вызывает разблокировать функцию дважды без промежуточного вызова функции блокировки.
Для получения дополнительной информации о многозадачных опциях смотрите Многозадачность.
Функции, которые спроектированы, чтобы обеспечить операции на ресурсе, должны быть вызваны в соответствующей последовательности.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: проект Кода |
Категория: консультация |
Категория AGC: консультация |
Язык: C90, C99 |
Check MISRA C:2012 (-misra3)
| MISRA C:2012 Rule 22.1
| MISRA C:2012 Rule 22.2
| MISRA C:2012 Rule 22.6