Mutex Verification Routines
互斥验证例程
#ifndef NDEBUG
int sqlite3_mutex_held(sqlite3_mutex*
int sqlite3_mutex_notheld(sqlite3_mutex*
#endif
sqlite3_mutex_held()和 sqlite3_mutex_notheld()例程旨在用于 assert()语句中。除了 assert()内部以外,SQLite 内核从不使用这些例程,并且建议应用程序遵循内核的领导。SQLite 内核仅在使用 SQLITE_DEBUG 标志编译时为这些例程提供实现。如果定义了 SQLITE_DEBUG 并且未定义 NDEBUG,则仅需要外部互斥体实现来提供这些例程。
如果参数中的互斥量分别由调用线程保持或未保持,则这些例程应该返回 true。
实现不需要提供实际工作的这些例程的版本。如果实现不提供这些例程的工作版本,则应至少提供始终返回 true 的存根,以便不会发生虚假断言失败。
如果 sqlite3_mutex_held()的参数是一个 NULL 指针,那么该例程应该返回1.这似乎违反直觉,因为如果互斥体不存在,显然互斥体无法保持。但互斥体不存在的原因是因为构建不使用互斥体。我们不希望包含对 sqlite3_mutex_held()的调用的 assert()失败,因此非零返回是适当的。给定NULL指针时, sqlite3_mutex_notheld() 接口也应该返回1。