Безопасность использования

Дается представление об особенностях использования функций системных библиотек

Описание большей части функций системных библиотек снабжено специальной таблицей в параграфе "Классификация":

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Да
Обработчик сигналов
Нет
В потоке
Нет

Таблица подобного вида раскрывает безопасность вызова в различных сценариях:

Точка остановки потока
Определяет возможность прерывания исполнения потока во время вызова функции (см. pthread_cancel()).
Обработчик прерываний
Определяет возможность безопасного использования функции внутри обработчика прерывания (см. InterruptAttach).

Warning: Если функция небезопасна, то ее вызов из обработчика может привести к фатальным общесистемным последствиям. Последствия в общем случае непредсказуемы и могут включать аварийное завершение случайных процессов и даже процесса procnto-*. В наилучшем сценарии подобного применения негаивный эффект проявится немедленно, в противном случае он будет проявляться в случайные моменты времени и связать его с конкретным обработчиком будет достаточно проблематично.

Обработчик сигналов
Безопасная функция обладает предсказуемым поведением как при вызове внутри обработчика сигналов, так и при прерывании сигналом другой небезопасной функции.

Некоторые из таких функций при неуспешном выполнении модифицируют errno, что необходимо учитывать при написании обработчика сигналов. Для этого следует отдельно сохранять (при входе в обработчик) и восстанавливать (при выходе) errno. В противном случае любой вызов функции, включая библиотечные, может получить асинхронно измененное значение errno, что в общем случае окажется непредсказуемым.
В потоке
Безопасность использования функции в многопоточных приложениях. Небезопасные функции могут иметь внутренние ресурсы, которые с некоторой вероятностью будут повреждены при ее одновременном вызове из нескольких потоков. Другие небезопасные вызовы могут иметь общий незащищенный ресурс в рамках своего класса функций. Такие функции в общем случае можно защитить отдельно, например, с использованием мьютекса.


Caution: Не является безопасным использование операций с плавающей точкой внутри обработчиков прерывания или сигналов.




Предыдущий раздел: Руководство разработчика