小巧。快速。可靠。
三选二。

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。

另请参阅对象常量函数列表。