Использование фьютексов (sync.h)
API определен в заголовочном файле sysroot-*-kos/include/coresrv/sync/sync.h
из состава KasperskyOS SDK.
API предназначен для работы с фьютексами и используется в коде функций API event.h, mutex.h, rwlock.h, semaphore.h, condvar.h. Фьютекс – низкоуровневый примитив синхронизации, для которого поддерживается две операции: блокировка потока исполнения с его добавлением в связанную с фьютексом очередь заблокированных потоков исполнения и возобновление исполнения потоков из связанной с фьютексом очереди заблокированных потоков исполнения. Фьютекс представляет собой объект ядра связанный с целочисленной переменной в пользовательском пространстве. Объект ядра обеспечивает возможность хранить очередь заблокированных потоков исполнения, связанную с фьютексом. Значение целочисленной переменной в пользовательском пространстве (значение фьютекса) атомарно изменяется синхронизируемыми потоками исполнения, чтобы сигнализировать об изменении состояния разделяемых ресурсов. Например, значение фьютекса может отражать, в каком состоянии находится событие (сигнальном или несигнальном), захвачен или освобожден мьютекс, какое значение имеет счетчик семафора. От значения фьютекса зависит, будет ли заблокирован поток исполнения, который пытается получить доступ к разделяемым ресурсам.
Сведения о функциях API приведены в таблице ниже.
Использование API
Чтобы использовать фьютекс, нужно создать только целочисленную переменную для хранения его значения. Функции API принимают указатель на эту переменную через параметр ftx
. Создание и удаление объекта ядра, связанного с этой переменной, выполняется автоматически при использовании функций API.
Функция KnFutexWait()
блокирует вызывающий поток исполнения, если значение фьютекса совпадает со значением параметра val
. (Значение фьютекса может быть изменено другим потоком исполнения во время выполнения функции.) Поток исполнения блокируется на время mdelay
, но исполнение этого потока может быть возобновлено до истечения времени mdelay
вызовом функции KnFutexWake()
из другого потока исполнения. Функция KnFutexWake()
возобновляет исполнение потоков из связанной с фьютексом очереди заблокированных потоков исполнения. Число потоков, исполнение которых возобновляется, ограничено значением параметра nThreads
. Возобновление исполнения потоков начинается с начала очереди.
Сведения о функциях API
Функции sync.h
Функция |
Сведения о функции |
---|---|
|
Назначение Блокирует вызывающий поток исполнения, если значение фьютекса равно ожидаемому. Параметры
Возвращаемые значения В случае успеха возвращает Если время блокировки потока исполнения истекло, возвращает Если значение фьютекса не равно ожидаемому, возвращает |
|
Назначение Возобновляет исполнение потоков, заблокированных вызовами функции Параметры
Возвращаемые значения В случае успеха возвращает |