Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Программные интерфейсы общего назначения > Системные библиотеки > Общие сведения > Контекст исполнения функций



Контекст исполнения функций

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

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

Контекст исполнения
Отдельный поток
Да
Многопоточность
Нет
Обработчик сигналов
Нет
Обработчик прерываний
Нет

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

Отдельный поток
Для вызова обработчика порождается отдельный специализированный поток. Это может оказаться важным в случае использования TLS в обработчике.
Многопоточность
Обработчик может быть вызван из нескольких потоков. В некоторых случаях от обработчика ожидается обеспечение потоко-безопасности, либо учет контекста конкретного потока.

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

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




Предыдущий раздел: Системные библиотеки