#ifndef NDEBUG int sqlite3_mutex_held(sqlite3_mutex *); int sqlite3_mutex_notheld(sqlite3_mutex *); #万一
sqlite3_mutex_held()和sqlite3_mutex_notheld()例程旨在在assert()语句中使用。除了在assert()内部使用之外,SQLite核心永远不会使用这些例程,建议应用程序遵循该核心。仅当使用SQLITE_DEBUG标志进行编译时,SQLite内核才提供这些例程的实现。仅当定义了SQLITE_DEBUG且未定义NDEBUG时,才需要外部互斥实现来提供这些例程。
如果例程中的互斥对象分别由调用线程保留或不保留,则这些例程应返回true。
不需要实现来提供这些实际起作用的例程的版本。如果实现不提供这些例程的工作版本,则它至少应提供始终返回true的存根,以便不会出现虚假的断言失败。
如果sqlite3_mutex_held()的参数是NULL指针,则例程应返回1。这似乎是违反直觉的,因为如果互斥量不存在,则显然无法保持互斥量。但是互斥锁不存在的原因是因为构建没有使用互斥锁。而且我们不希望包含对sqlite3_mutex_held()的调用的assert()失败,因此非零返回是合适的做法。当给定NULL指针时,sqlite3_mutex_notheld()接口也应返回1。