小巧、快速、可靠。
選擇其中三項。

SQLite C 介面

互斥鎖驗證例程(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() 陳述式內。SQLite 核心除了在 assert() 內部之外,絕不會使用這些例程,建議應用程式遵循核心的做法。SQLite 核心僅在使用 SQLITE_DEBUG 旗標編譯時,才會提供這些例程的實作。僅當定義了 SQLITE_DEBUG 且未定義 NDEBUG 時,才需要外部互斥鎖實作提供這些例程。

如果呼叫執行緒持有或未持有其引數中的互斥鎖,則這些例程應分別返回 true(真)。

實作不需要提供實際有效的這些例程版本。如果實作未提供這些例程的有效版本,則它至少應提供始終返回 true 的 stub(虛設程式),以免產生虛假的斷言失敗。

如果 sqlite3_mutex_held() 的引數是 NULL 指標,則例程應返回 1。這似乎違反直覺,因為如果互斥鎖不存在,則顯然無法持有它。但互斥鎖不存在的原因是因為建置未使用互斥鎖。而且我們不希望包含 sqlite3_mutex_held() 呼叫的 assert() 失敗,因此返回非零值是適當的做法。當給定 NULL 指標時,sqlite3_mutex_notheld() 介面也應返回 1。

另請參閱物件常數函式的列表。