2011-10-21 9 views
5

nella documentazione qui: http://www.sqlite.org/threadsafe.htmlmodalità Serialized di Sqlite

Per la modalità serializzato dice: "nel modo serializzato, SQLite può essere utilizzato in modo sicuro da più thread senza alcuna restrizione."

Voglio assicurarmi di comprendere la garanzia qui presentata. Se viene aperta una singola connessione al database utilizzando il flag "SQLITE_OPEN_FULLMUTEX" e due thread tentano contemporaneamente di chiamare sqlite3_exec nello stesso esatto istante, Sqlite serializza automaticamente le chiamate?

risposta

4

La risposta è sì. sqlite3_exec() acquisirà un mutex quando viene inserita la funzione e rilascia il mutext una volta che la funzione viene lasciata. Solo un thread può possedere il mutex in un dato momento, quindi solo un thread può eseguire sqlite3_exec() in qualsiasi momento. Se due thread cercano di eseguire sqlite3_exec() allo stesso tempo, uno attenderà l'altro.