![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
sqlite3_mutex_held() и sqlite3_mutex_notheld()
предназначается для использования внутри assert(). Ядро SQLite никогда не
использует эту хранимую процедуру, кроме внутренней части assert().
Ядро SQLite обеспечивает внедрения для этого установленного порядка только
когда оно собрано с флагом SQLITE_DEBUG. Внешние mutex внедрения должны
обеспечивать эту хранимую процедуру только если SQLITE_DEBUG определяется и
NDEBUG не определяется. Это должно возвратить true, если mutex в их аргументе проведен или не
проведен, соответственно, вызывающим потоком. Внедрение не требуется, чтобы обеспечивать версии этого установленного
порядка, это на самом деле работает.
Если внедрение не обеспечивает рабочие версии этого установленного порядка,
оно должно, по крайней мере, обеспечить заглушки, которые всегда возвращают
true, чтобы никто не получал поддельные неудачи. Если аргумент sqlite3_mutex_held() это NULL, вернется 1.
Это кажется парадоксальным, так как mutex не может быть проведен, если он не
существует. Но причина, по которой mutex не существует, состоит в том, что
сборка не использует mutexes. И мы не хотим, чтобы assert(),
содержащий запрос sqlite3_mutex_held(),
потерпел неудачу, таким образом, возвращение отличное от нуля, правильно.
sqlite3_mutex_notheld() должен также возвратить 1, когда ему дали NULL.
Choose any three.
SQLite C Interface
Режимы проверки Mutex
#ifndef NDEBUG
int sqlite3_mutex_held(sqlite3_mutex*);
int sqlite3_mutex_notheld(sqlite3_mutex*);
#endif