2011-11-01 20 views
5

La mia applicazione gestisce tutti i suoi dati in un SQLiteDatabase a cui si accede da un numero di thread.Posso bloccare una tabella SQLite per il thread corrente?

In questo momento ho mantenuto tutte le mie chiamate DB sincronizzate sul database stesso.

Il motivo per cui voglio farlo è che occasionalmente voglio aggiornare la tabella acquisendo la versione più recente da un server e ricostruendo la tabella da stratch. Per risparmiare tempo sto realizzando un secondo tavolo e poi rimpiazzando l'originale quando ho finito (bloccandolo con un sincronismo mentre lo sto facendo).

Il problema è o io di tanto in tanto le mie chiamate SQL stallo per molto tempo (a causa delle serrature sincroni) o ottengo un errore quando una chiamata SQL tenta di eseguire se stesso nel breve periodo in cui la mia una tabella è sempre copiato al di sopra di.

È possibile bloccare il mio database da altre operazioni mentre si aggiorna, ma le operazioni A, B, C, ecc vengono eseguite contemporaneamente?

Cheers!

risposta

0

Sono quasi sicuro che quello che vuoi è un ReadWriteLock. Fondamentalmente, mette due blocchi diversi sul tuo database, uno per la lettura e uno per la scrittura. Mentre il blocco scrittura è bloccato, nessun altro può leggere o scrivere. Se uno qualsiasi dei blocchi di lettura è bloccato (da un numero qualsiasi di thread), il blocco di scrittura non sarà in grado di bloccarsi finché tutti non avranno finito di leggere.

+0

Sì! Questo è praticamente esattamente quello che stavo cercando! Molto meglio che sincronizzato per quello che stavo facendo. Grazie! :) – isep

+0

@isep Ciao, ho avuto problemi con Black Berry Developing, in cui ho bisogno di lavorare con Multiple Threads sono l'accesso al database aperto e chiuso, inserisci, aggiorna, cancella, quindi puoi fornire alcune delle tue soluzioni per questo o per qualsiasi altro esempio in BB, in questo momento ho fatto il mio lavoro con il database di tracciamento aperto e chiuso il conteggio. Ma qualche volta mi dà la routine del database per errore di sequenza. – Herry

Problemi correlati