2011-11-01 13 views
5

Mi aplicación gestiona todos sus datos en una base de datos SQLite a la que acceden varios subprocesos.¿Puedo bloquear una tabla SQLite para el hilo actual?

En este momento he mantenido sincronizadas todas mis llamadas a bases de datos en la base de datos.

La razón por la que quiero hacer esto es que ocasionalmente quiero actualizar la tabla al tomar la versión más reciente de un servidor y reconstruir la tabla desde stratch. Para ahorrar tiempo, en realidad estoy haciendo una segunda tabla y luego reemplazo la original cuando termino (bloqueándola con un sincronizado mientras hago esto).

El problema es que de vez en cuando tengo mis llamadas SQL atascadas por largo tiempo (debido a los bloqueos síncronos) u obtengo un error cuando una llamada SQL intenta ejecutarse en el breve período cuando mi única tabla está siendo copiada encima.

¿Existe alguna necesidad de que bloquee mi base de datos de otras operaciones mientras se actualiza pero permite que las operaciones A, B, C, etc. se ejecuten simultáneamente?

¡Salud!

Respuesta

0

Estoy bastante seguro de que lo que quiere es ReadWriteLock. Básicamente, pone dos bloqueos diferentes en su base de datos, uno para leer y otro para escribir. Mientras el bloqueo de escritura está bloqueado, nadie más puede leer o escribir. Si alguno de los bloqueos de lectura está bloqueado (por cualquier número de subprocesos), el bloqueo de escritura no podrá bloquearse hasta que todos hayan terminado de leer.

+0

¡Sí! ¡Esto es exactamente lo que estaba buscando! Mucho mejor que sincronizado por lo que estaba haciendo. ¡Gracias! :) – isep

+0

@isep Hola, he tenido problemas en Black Berry Developing, en el que tengo que trabajar con Multiple Threads accediendo a la base de datos abrir y cerrar, insertar, actualizar, eliminar, así que puede proporcionar alguna solución para ello o cualquier otro bien ejemplo en BB, ahora mismo hice que mi trabajo con la base de datos de seguimiento se abriera y cerrara el recuento. Pero en algún momento me dio una rutina de la base de datos fuera de error de secuencia. – Herry

Cuestiones relacionadas