Могу ли я заблокировать таблицу SQLite для текущего потока? - PullRequest
5 голосов
/ 01 ноября 2011

Мое приложение управляет всеми своими данными в базе данных SQLite, доступ к которой осуществляется несколькими потоками.

Сейчас я синхронизирую все вызовы БД в самой базе данных.

Причина, по которой я хочу это сделать, заключается в том, что иногда я хочу обновить таблицу путем получения самой последней версии с сервера и восстановления таблицы с нуля.Чтобы сэкономить время, я на самом деле создаю вторую таблицу, а затем заменяю оригинал, когда я закончу (блокируя его синхронизированным, пока я делаю это).

Проблема в том, что я иногда получаю свойВызовы SQL задерживаются на долгое время (из-за синхронных блокировок), или я получаю сообщение об ошибке, когда вызов SQL пытается выполнить себя в течение короткого периода времени, когда моя одна таблица копируется.

Есть лидля меня, чтобы заблокировать базу данных от других операций, пока она обновляется, но пусть операции A, B, C и т. д. выполняются одновременно?

Приветствия!

1 Ответ

0 голосов
/ 01 ноября 2011

Я почти уверен, что вам нужен ReadWriteLock .По сути, он устанавливает две разные блокировки в вашей базе данных, одну для чтения и одну для записи.Пока блокировка записи заблокирована, никто не может читать или писать.Если какая-либо из блокировок чтения заблокирована (любым числом потоков), блокировка записи не сможет блокироваться, пока все не закончат чтение.

...