SQLite C 接口
互斥量验证例程
#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。这似乎违反直觉,因为很明显,如果互斥量不存在,则无法保持。但是互斥锁不存在的原因是因为构建没有使用互斥锁。而且我们不希望包含对 sqlite3_mutex_held() 调用的 assert() 失败,因此返回非零值是合适的做法。当给定 NULL 指针时,sqlite3_mutex_notheld() 接口也应该返回 1。