SQLite unterstützt 3 Thread-Modi:
Einzelthread: In diesem Modus gibt es keinen gegenseitigen Ausschluss und Multithreading ist unsicher. Deaktivieren Sie alle Mutex-Sperren. Bei gleichzeitiger Verwendung treten Fehler auf. Es wird aktiviert, wenn der Parameter SQLITE_THREADSAFE=0 beim Kompilieren von SQLite hinzugefügt wird oder wenn sqlite3_config(SQLITE_CONFIG_SINGLETHREAD) vor der Initialisierung von SQLite aufgerufen wird.
Multithreading: In diesem Modus ist eine Datenbankverbindung sicher, solange sie nicht von mehreren Threads gleichzeitig verwendet wird. Im Quellcode ist bCoreMutex aktiviert und bFullMutex deaktiviert. Tatsächlich ist es das Deaktivieren von Datenbankverbindungen und vorbereitet
Sperren Sie die Anweisung (vorbereitete Anweisung), sodass dieselbe Datenbankverbindung oder vorbereitete Anweisung nicht gleichzeitig in mehreren Threads verwendet werden kann
Stellungnahme. Es ist standardmäßig aktiviert, wenn der Parameter SQLITE_THREADSAFE=2 beim Kompilieren von SQLite hinzugefügt wird. Wenn SQLITE_THREADSAFE nicht 0 ist, können Sie sqlite3_config(SQLITE_CONFIG_MULTITHREAD) aufrufen, um es vor der Initialisierung von SQLite zu aktivieren, oder beim Erstellen einer Datenbankverbindung SQLITE_OPEN_NOMUTEX festlegen
Flagge.
Seriennummer: SQLite ist threadsicher. Aktivieren Sie alle Sperren, einschließlich bCoreMutex und bFullMutex
. Denn die Datenbankanbindung ist vorbereitet
Anweisungen sind alle gesperrt. Wenn also mehrere Threads diese Objekte verwenden, können sie nicht gleichzeitig verwendet werden und werden seriell. SQLITE_THREADSAFE wird hinzugefügt, wenn SQLite kompiliert wird
Der Parameter =1 ist standardmäßig aktiviert. Wenn SQLITE_THREADSAFE nicht 0 ist, können Sie sqlite3_config(SQLITE_CONFIG_SERIALIZED) aufrufen, um es vor der Initialisierung von SQLite zu aktivieren, oder beim Erstellen einer Datenbankverbindung SQLITE_OPEN_FULLMUTEX festlegen
Flagge.
Die hier erwähnte Initialisierung bezieht sich auf den Aufruf der Funktion sqlite3_initialize(). Diese Funktion wird automatisch aufgerufen, wenn sqlite3_open() aufgerufen wird, und nur der erste Aufruf ist gültig Um Thread-sicher zu sein, muss SQLite beim Kompilieren das Vorverarbeitungsmakro SQLITE_THREADSAFE auf 1 setzen. Unter Windows und Linux,
Dies ist die Einstellung in gut kompilierten Binärdistributionen. Wenn Sie nicht sicher sind, ob die von Ihnen verwendete Bibliothek threadsicher ist, können Sie dies herausfinden, indem Sie die Schnittstelle sqlite3_threadsafe() aufrufen. Rufen Sie sqlite3_threadsafe() auf, um den SQLITE_THREADSAFE-Parameter zur Kompilierungszeit abzurufen.
Das heißt, der Thread-Modus kann zur Kompilierungszeit (wenn die SQLite-Bibliothek aus dem Quellcode kompiliert wird), beim Start (wenn die Anwendung, die SQLite verwendet, initialisiert wird) oder zur Laufzeit (wenn die Datenbankverbindung erstellt wird) angegeben werden. Im Allgemeinen überschreibt der zur Laufzeit angegebene Modus den beim Start angegebenen Modus und der beim Start angegebene Modus überschreibt den zur Kompilierungszeit angegebenen Modus. Sobald jedoch der Single-Threaded-Modus angegeben ist, kann er nicht überschrieben werden. Der Standard-Thread-Modus ist der serielle Modus.
Thread-Modus beim Kompilieren auswählen
Sie können den Thread-Modus angeben, indem Sie das SQLITE_THREADSAFE-Makro definieren. Wenn nicht angegeben, wird standardmäßig der serielle Modus verwendet. Definieren Sie das Makro SQLITE_THREADSAFE=1, um die Verwendung des seriellen Modus anzugeben; =0, um den Single-Thread-Modus zu verwenden; =2, um den Multi-Thread-Modus zu verwenden.
Der Rückgabewert der Funktion sqlite3_threadsafe() kann den zur Kompilierungszeit angegebenen Thread-Modus bestimmen. Wenn der Single-Threaded-Modus angegeben ist, gibt die Funktion „false“ zurück. Wenn der serielle oder Multithread-Modus angegeben ist, gibt die Funktion „true“ zurück. Da die Funktion sqlite3_threadsafe() dem Multithread-Modus und der Modusauswahl beim Start und zur Laufzeit vorangeht, kann sie nicht zwischen Multithread-Modus und seriellem Modus oder Start- und Laufzeitmodus unterscheiden.
Der letzte Satz kann durch die Implementierung der sqlite3_threadsafe-Funktion SQLITE_API int verstanden werden
sqlite3_threadsafe(void){ return SQLITE_THREADSAFE;
} Wenn der Single-Thread-Modus zur Kompilierungszeit angegeben wird, wird die kritische Mutex-Logik zur Konstruktionszeit weggelassen, sodass beim Start oder zur Laufzeit kein serieller Modus oder Multi-Thread-Modus angegeben werden kann.
Thread-Modus beim Start auswählen
Single-Thread-Modus, SQLITE_CONFIG_MULTITHREAD als Multi-Thread-Modus und SQLITE_CONFIG_SERIALIZED als serieller Modus angegeben werden.
Thread-Modus zur Laufzeit auswählen
Verwenden Sie den dritten Parameter der Funktion sqlite3_open_v2(), um den Thread-Modus beim Erstellen einer Verbindung anzugeben. SQLITE_OPEN_NOMUTEX identifiziert eine im Multithread-Modus erstellte Verbindung; SQLITE_OPEN_FULLMUTEX identifiziert eine im seriellen Modus erstellte Verbindung. Wenn kein Bezeichner angegeben ist oder die Funktion sqlite3_open() oder sqlite3_open16() zum Erstellen einer Datenbankverbindung verwendet wird, wird der zur Kompilierungszeit oder Startzeit angegebene Thread-Modus als Standard-Thread-Modus verwendet.
Das Obige ist eine ausführliche Zusammenfassung der Verwendung von SQLite-Multithreading. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).