首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mutex Verification Routines

代码语言:javascript
复制
#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。

扫码关注腾讯云开发者

领取腾讯云代金券