API определен в заголовочном файле sysroot-*-kos/include/kos/mutex.h из состава KasperskyOS SDK. Также в составе KasperskyOS SDK поставляется заголовочный файл sysroot-*-kos/include/kos/sync_api.h, который дает возможность транзитивно включить в исходный код программы заголовочный файл mutex.h и заголовочные файлы для использования других примитивов синхронизации.
API предназначен для синхронизации потоков исполнения на основе мьютексов. Мьютекс – примитив синхронизации, который обеспечивает взаимоисключающее исполнение критических секций (участков кода, в которых осуществляется обращение к разделяемым между потоками исполнения ресурсам). Один поток захватывает мьютекс и исполняет критическую секцию, а другие потоки, чтобы исполнить критические секции, пытаются захватить этот мьютекс, ожидая его освобождения. Мьютекс может быть освобожден только тем потоком исполнения, которым он захвачен. Рекурсивный мьютекс может быть захвачен одним потоком исполнения несколько раз.
Можно использовать мьютексы без поддержки наследования приоритета и опционально (в зависимости от конфигурации ядра KasperskyOS) с поддержкой наследования приоритета.
Мьютексы с поддержкой наследования приоритета имеют следующие особенности:
Мьютексы без поддержки наследования приоритета имеют следующие особенности:
Сведения о функциях API приведены в таблице ниже.
Использование API
Типовой сценарий использования API для мьютексов без поддержки наследования приоритета включает следующие шаги:
KosMutexInit() или KosMutexInitEx().KosMutexTryLock(), KosMutexLock() или KosMutexLockTimeout().KosMutexUnlock().KosMutexIsLocked().Эта проверка выполняется атомарно и без захвата мьютекса. Сразу после того, как функция KosMutexIsLocked() вернула управление, состояние мьютекса может измениться. Поэтому эту функцию можно использовать только для того, чтобы убедиться, что мьютекс находится в ожидаемом состоянии после захвата (например, при рекурсивных захватах).
Типовой сценарий использования API для мьютексов с поддержкой наследования приоритета включает следующие шаги:
KosRtMutexInit().Перед выполнением этого шага нужно проверить, обеспечивает ли применяемая версия ядра возможность использовать мьютексы с поддержкой наследования приоритета. Для этого нужно вызвать функцию KosRtMutexIsSupported().
KosRtMutexLock() или KosRtMutexLockTimeout().KosRtMutexUnlock().Сведения о функциях API
Функции mutex.h
Функция |
Сведения о функции |
|---|---|
|
Назначение Инициализирует мьютекс без поддержки наследования приоритета, который не является рекурсивным. Параметры
Возвращаемые значения Нет. |
|
Назначение Инициализирует мьютекс без поддержки наследования приоритета. Параметры
Возвращаемые значения Нет. |
|
Назначение Захватывает мьютекс без поддержки наследования приоритета. Если мьютекс уже захвачен, не ожидает его освобождения, а возвращает управление. Параметры
Возвращаемые значения В случае успеха возвращает Если мьютекс уже захвачен, возвращает |
|
Назначение Захватывает мьютекс без поддержки наследования приоритета. Если мьютекс уже захвачен, ожидает его освобождения сколь угодно долго. Параметры
Возвращаемые значения Нет. |
|
Назначение Освобождает мьютекс без поддержки наследования приоритета. Параметры
Возвращаемые значения Нет. |
|
Назначение Захватывает мьютекс без поддержки наследования приоритета. Если мьютекс уже захвачен, ожидает его освобождения не дольше заданного времени. Параметры
Возвращаемые значения В случае успеха возвращает Если время ожидания истекло, возвращает Дополнительные сведения Неблокирующий вызов, если в параметре |
|
Назначение Проверяет, захвачен ли мьютекс без поддержки наследования приоритета. Параметры
Возвращаемые значения Если мьютекс захвачен, возвращает |
|
Назначение Проверяет, обеспечивает ли применяемая версия ядра возможность использовать мьютексы с поддержкой наследования приоритета. Параметры Нет. Возвращаемые значения В случае успешной проверки возвращает |
|
Назначение Инициализирует мьютекс с поддержкой наследования приоритета. Параметры
Возвращаемые значения Нет. |
|
Назначение Захватывает мьютекс с поддержкой наследования приоритета. Если мьютекс уже захвачен, ожидает его освобождения сколь угодно долго. Параметры
Возвращаемые значения Нет. |
|
Назначение Освобождает мьютекс с поддержкой наследования приоритета. Параметры
Возвращаемые значения Нет. |
|
Назначение Захватывает мьютекс с поддержкой наследования приоритета. Если мьютекс уже захвачен, ожидает его освобождения не дольше заданного времени. Параметры
Возвращаемые значения В случае успеха возвращает Если время ожидания истекло, возвращает Дополнительные сведения Неблокирующий вызов, если в параметре |