Текущий раздел:

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.3. Синхронизация потоков RDS

А.5.3.5. rdsUnlockBlockData – выключение блокировки данных

# Приложения

## Приложение А. Функции, константы и структуры RDS

### А.5. Сервисные функции и макросы RDS

#### А.5.3. Синхронизация потоков RDS

##### А.5.3.5. rdsUnlockBlockData – выключение блокировки данных

Функция rdsUnlockBlockData выключает блокировку данных загруженной схемы, включенную ранее функцией rdsLockBlockData.

      void RDSCALL rdsUnlockBlockData(void);

Тип указателя на эту функцию

RDS_VV

Примечания

Вызов rdsUnlockBlockData выключает блокировку данных, включенную вызовом rdsLockBlockData. Функция работает следующим образом:

- если данные не заблокированы ни одним из потоков или заблокированы не тем потоком, из которого вызвана rdsUnlockBlockData (то есть функция вызвана ошибочно, перед ней не было вызова rdsLockBlockData), функция немедленно возвращает управление вызвавшему потоку;
- если данные заблокированы тем же самым потоком, из которого вызвана функция, и внутренний счетчик блокировок больше единицы, значение счетчика уменьшается и управление возвращается вызвавшему потоку (блокировка при этом не снимается);
- если данные заблокированы тем же самым потоком, из которого вызвана функция, и внутренний счетчик блокировок равен единице, блокировка снимается и счетчику блокировок присваивается нулевое значение.

Используемый в RDS счетчик блокировок позволяет вкладывать вызовы rdsLockBlockData/rdsUnlockBlockData друг в друга: данные будут разблокированы только тогда, когда rdsUnlockBlockData будет вызвана столько же раз, сколько раз была вызвана rdsLockBlockData.

Крайне важно вызывать rdsUnlockBlockData как можно быстрее после вызова rdsLockBlockData, поскольку попытки других потоков заблокировать данные будет приводить к их остановке до снятия блокировки этим потоком, что вызовет задержки в работе RDS. Если необходимо провести над данными какую-либо сложную и длительную операцию в режиме расчета, лучше всего будет заблокировать их, скопировать в какие-либо внутренние структуры, а затем разблокировать и провести необходимые операции уже над данными во внутренних структурах.

Использование функций rdsLockBlockData и rdsUnlockBlockData рассматривается в §1.8 руководства программиста.

См. также

rdsLockBlockData, rdsBlockDataSyncCall, rdsUnlockAndCall.