小巧、快速、可靠。
擇三。

SQLite C 介面

互斥鎖方法物件 (Mutex Methods Object)

typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
struct sqlite3_mutex_methods {
  int (*xMutexInit)(void);
  int (*xMutexEnd)(void);
  sqlite3_mutex *(*xMutexAlloc)(int);
  void (*xMutexFree)(sqlite3_mutex *);
  void (*xMutexEnter)(sqlite3_mutex *);
  int (*xMutexTry)(sqlite3_mutex *);
  void (*xMutexLeave)(sqlite3_mutex *);
  int (*xMutexHeld)(sqlite3_mutex *);
  int (*xMutexNotheld)(sqlite3_mutex *);
};

此結構的實例定義了用於分配和使用互斥鎖的低階常式。

通常,SQLite 提供的預設互斥鎖實現已足夠,但應用程式可以選擇替換自訂實現,以用於特殊部署或 SQLite 未提供合適實現的系統。在這種情況下,應用程式會建立並填入此結構的實例,並將其與 SQLITE_CONFIG_MUTEX 選項一起傳遞給 sqlite3_config()。此外,使用 SQLITE_CONFIG_GETMUTEX 選項查詢系統目前的互斥鎖實現時,可以使用此結構的實例作為輸出變數。

此結構定義的 xMutexInit 方法會在系統初始化過程中由 sqlite3_initialize() 函式呼叫。SQLite 會針對每次有效呼叫 sqlite3_initialize() 時,呼叫 xMutexInit 常式一次。

此結構定義的 xMutexEnd 方法會在系統關閉過程中由 sqlite3_shutdown() 函式呼叫。此方法的實現應釋放互斥鎖方法實現所獲得的所有未釋放資源,尤其是 xMutexInit 方法所獲得的資源。每次呼叫 sqlite3_shutdown() 時,都會呼叫 xMutexEnd() 介面一次。

此結構定義的其他七個方法(xMutexAlloc、xMutexFree、xMutexEnter、xMutexTry、xMutexLeave、xMutexHeld 和 xMutexNotheld)分別實現了以下介面:

唯一的區別是,上面列舉的公開 sqlite3_XXX 函式會自動忽略任何傳遞 NULL 指標而不是有效互斥鎖控制代碼的呼叫。此結構定義的方法的實現不需要處理這種情況。傳遞 NULL 指標而不是有效互斥鎖控制代碼的結果未定義(即,如果傳遞 NULL 指標,則可以提供會發生區段錯誤的實現)。

xMutexInit() 方法必須是執行緒安全的。在同一個處理程序中多次呼叫 xMutexInit() 且不呼叫 xMutexEnd() 必須是無害的。第二次及後續呼叫 xMutexInit() 必須是無運算 (no-op)。

xMutexInit() 不得使用 SQLite 記憶體配置(sqlite3_malloc() 及其相關函式)。同樣地,xMutexAlloc() 不得使用 SQLite 記憶體配置來配置靜態互斥鎖。然而,xMutexAlloc() 可以使用 SQLite 記憶體配置來配置快速或遞迴互斥鎖。

當呼叫 sqlite3_shutdown() 時,SQLite 會呼叫 xMutexEnd() 方法,但前提是先前呼叫 xMutexInit 返回 SQLITE_OK。如果 xMutexInit 以任何方式失敗,則應在返回之前自行清理。

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