Dalle domande frequenti su SQLite ho saputo che:
Più processi possono avere lo stesso database aperto contemporaneamente. Più processi possono essere eseguiti
SELECTcontemporaneamente. Tuttavia, solo un processo può apportare modifiche al database in qualsiasi momento.
Quindi, per quanto ho capito che posso: 1) Leggi db da più thread ( SELECT) 2) Leggi db da più thread ( SELECT) e write da unico filo ( CREATE, INSERT, DELETE)
Ma ho letto di Scrivere in anticipo che fornisce più concorrenza poiché i lettori non bloccano gli scrittori e uno scrittore non blocca i lettori . La lettura e la scrittura possono procedere contemporaneamente.
Infine, ho completamente confuso quando ho scoperto che , quando specificato:
Ecco altri motivi per ottenere un errore SQLITE_LOCKED:
- Prova a
CREATEoDROPuna tabella o un indice mentreSELECTun'istruzione è ancora in sospeso.- Tentativo di scrivere su una tabella mentre a
SELECTè attivo su quella stessa tabella.- Provando a fare due
SELECTsulla stessa tabella contemporaneamente in un'applicazione multithread, se sqlite non è impostato per farlo.- fcntl (3, la chiamata F_SETLK sul file DB ha esito negativo. Ciò potrebbe essere causato, ad esempio, da un problema di blocco NFS. Una soluzione a questo problema è rimuovere il DB e copiarlo nuovamente in modo che abbia un nuovo valore Inode
Quindi, vorrei chiarire da solo, è necessario evitare il blocco? Posso leggere e scrivere contemporaneamente da due thread diversi? Grazie.
isolation_level=Noneperò. Senza la modalità cache condivisa, come posso condividere istanze tra thread?