Ответ 1
Несколько компьютерных процессов или потоков могут обращаться к одной и той же базе данных без проблем. Несколько запросов на чтение могут выполняться параллельно.
Точнее, из FAQ:
Несколько процессов могут одновременно открывать одну и ту же базу данных. Несколько процессов могут одновременно выполнять SELECT. Однако только один процесс может вносить изменения в базу данных в любой момент времени.
Одна запись в базу данных, однако, блокирует базу данных в течение короткого времени, поэтому ничто не может получить к ней доступ вообще (даже не чтение). Подробности можно найти в Блокировка файлов и Concurrency В SQLite версии 3. В принципе, чтение базы данных не представляет проблемы, если кто-то не захочет немедленно записывать в базу данных. В этом случае БД блокируется исключительно на время, необходимое для выполнения этой транзакции, и блокировка будет выпущена впоследствии. Тем не менее, подробности о том, что именно происходит с операциями чтения на датапазе во время блокировки PENDING или EXCLUSIVE, мало. Я предполагаю, что они либо возвращают SQLITE_BUSY
, либо блокируют, пока не смогут их прочитать. В первом случае не следует слишком сложно просто повторить попытку, особенно если вы ожидаете, что несколько записей будут записаны.