Spec-Zone.ru › SQLite

Процедуры проверки мьютексов

#ifndef NDEBUG
int sqlite3_mutex_held(sqlite3_mutex*);
int sqlite3_mutex_notheld(sqlite3_mutex*);
#endif

Процедуры sqlite3_mutex_held() и sqlite3_mutex_notheld() предназначены для использования внутри утверждений assert(). Ядро SQLite никогда не использует эти процедуры, кроме как внутри assert(), и приложениям рекомендуется следовать примеру ядра. Ядро SQLite предоставляет реализации этих процедур только при компиляции со флагом SQLITE_DEBUG. Внешние реализации мьютексов должны предоставлять эти процедуры только если определен SQLITE_DEBUG и не определен NDEBUG.

Эти процедуры должны возвращать true, если мьютекс в их аргументе удерживается или не удерживается, соответственно, вызывающей нитью.

Реализация не обязана предоставлять версии этих процедур, которые фактически работают. Если реализация не предоставляет рабочих версий этих процедур, она должна по крайней мере предоставить заглушки, которые всегда возвращают true, чтобы избежать ложных сбоев утверждений.

Если аргумент для sqlite3_mutex_held() — указатель NULL, то процедура должна возвращать 1. Это кажется нелогичным, так как очевидно, что мьютекс не может быть удержан, если он не существует. Но причина, по которой мьютекс не существует, заключается в том, что сборка не использует мьютексы. И мы не хотим, чтобы утверждение assert(), содержащее вызов sqlite3_mutex_held(), завершилось ошибкой, поэтому возвращение ненулевого значения — это соответствующее действие. Интерфейс sqlite3_mutex_notheld() также должен возвращать 1 при получении указателя NULL.

См. также списки Объектов, Констант и Функций.

SQLite is in the Public Domain.
https://sqlite.org/c3ref/mutex_held.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API