Использование блокировок чтения-записи (rwlock.h)

API определен в заголовочном файле sysroot-*-kos/include/kos/rwlock.h из состава KasperskyOS SDK. Также в составе KasperskyOS SDK поставляется заголовочный файл sysroot-*-kos/include/kos/sync_api.h, который дает возможность транзитивно включить в исходный код программы заголовочный файл rwlock.h и заголовочные файлы для использования других примитивов синхронизации.

API предназначен для синхронизации потоков исполнения на основе блокировок чтения-записи. Блокировка чтения-записи – примитив синхронизации, который используется, чтобы разрешить доступ к разделяемым между потоками исполнения ресурсам либо на запись для одного потока исполнения, либо на чтение для нескольких потоков исполнения одновременно.

Сведения о функциях API приведены в таблице ниже.

Использование API

Типовой сценарий использования API включает следующие шаги:

  1. Инициализация блокировки чтения-записи вызовом функции KosRWLockInit().
  2. Использование блокировки чтения-записи потоками исполнения:
    1. Захват блокировки чтения-записи для записи (вызовом функции KosRWLockWrite() или KosRWLockTryWrite()) или для чтения (вызовом функции KosRWLockRead() или KosRWLockTryRead()).
    2. Освобождение блокировки-чтения вызовом функции KosRWLockUnlock().

Сведения о функциях API

Функции rwlock.h

Функция

Сведения о функции

KosRWLockInit()

Назначение

Инициализирует блокировку чтения-записи.

Параметры

  • [out] rwlock – указатель на блокировку чтения-записи. Тип блокировки чтения-записи определен в заголовочном файле sysroot-*-kos/include/kos/sync_types.h из состава KasperskyOS SDK.

Возвращаемые значения

Нет.

KosRWLockRead()

Назначение

Захватывает блокировку чтения-записи для чтения.

Если блокировка чтения-записи уже захвачена для записи, или есть потоки исполнения, ожидающие захвата этой блокировки чтения-записи для записи, то ожидает освобождения этой блокировки чтения-записи от захвата для записи сколь угодно долго.

Параметры

  • [in,out] rwlock – указатель на блокировку чтения-записи. Тип блокировки чтения-записи определен в заголовочном файле sysroot-*-kos/include/kos/sync_types.h из состава KasperskyOS SDK.

Возвращаемые значения

Нет.

KosRWLockTryRead()

Назначение

Захватывает блокировку чтения-записи для чтения.

Если блокировка чтения-записи уже захвачена для записи, или есть потоки исполнения, ожидающие захвата этой блокировки чтения-записи для записи, то не ожидает освобождения этой блокировки чтения-записи от захвата для записи, а возвращает управление.

Параметры

  • [in,out] rwlock – указатель на блокировку чтения-записи. Тип блокировки чтения-записи определен в заголовочном файле sysroot-*-kos/include/kos/sync_types.h из состава KasperskyOS SDK.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KosRWLockWrite()

Назначение

Захватывает блокировку чтения-записи для записи.

Если блокировка чтения-записи уже захвачена для записи или чтения, ожидает освобождения этой блокировки чтения-записи сколь угодно долго.

Параметры

  • [in,out] rwlock – указатель на блокировку чтения-записи. Тип блокировки чтения-записи определен в заголовочном файле sysroot-*-kos/include/kos/sync_types.h из состава KasperskyOS SDK.

Возвращаемые значения

Нет.

KosRWLockTryWrite()

Назначение

Захватывает блокировку чтения-записи для записи.

Если блокировка чтения-записи уже захвачена для записи или чтения, не ожидает освобождения этой блокировки чтения-записи, а возвращает управление.

Параметры

  • [in,out] rwlock – указатель на блокировку чтения-записи. Тип блокировки чтения-записи определен в заголовочном файле sysroot-*-kos/include/kos/sync_types.h из состава KasperskyOS SDK.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KosRWLockUnlock()

Назначение

Освобождает блокировку чтения-записи.

Параметры

  • [in,out] rwlock – указатель на блокировку чтения-записи. Тип блокировки чтения-записи определен в заголовочном файле sysroot-*-kos/include/kos/sync_types.h из состава KasperskyOS SDK.

Возвращаемые значения

Нет.

Дополнительные сведения

Если блокировка чтения-записи захвачена для чтения, то эта блокировка чтения-записи остается захваченной для чтения, пока все потоки исполнения, выполняющие чтение, не освободят ее.

В начало