2008-12-10 4 views

ответ

1

Не обязательно. Если sqlite3 скомпилирован с помощью макроса потоковой безопасности (проверьте через функцию

int sqlite3_threadsafe(void)
), вы можете попытаться получить доступ к одной и той же БД из нескольких потоков без риска повреждения. Однако, в зависимости от требуемых блокировок, вы можете или не можете реально изменять данные (я не верю, что sqlite3 поддерживает блокировку строк, а это значит, что для записи вам нужно будет заблокировать таблицу). Однако вы можете попробовать; если один поток блокирует, то он автоматически записывается, как только другой поток заканчивается с БД.

6

Нет. SQLite не поддерживает одновременный доступ к записи в тот же файл базы данных. SQLite просто заблокирует одну из транзакций до тех пор, пока не закончит другую.

4

обратите внимание, что если вы используете питон, чтобы получить доступ к sqlite3 соединения из различных потоков, что нужно отключить check_same_thread аргумент, например:

sqlite.connect (": памяти:" check_same_thread = False)

от 24 мая 2010 года эти документы опускают эту опцию. упущение в списке как ошибка here

1

Вы можете использовать SQLite в 3-х различных режимах:

http://www.sqlite.org/threadsafe.html

Если вы решили Многопоточной режим или сериализованную режим, вы можете легко использовать SQLite в мульти- нить. В таких ситуациях вы можете читать все ваши потоки одновременно. Если вам нужно писать одновременно, открытая таблица будет автоматически блокироваться для текущего потока писем и разблокировать после этого (следующий поток будет ждать (mutex) для его хода, пока таблица не будет разблокирована). Во всех этих случаях вам необходимо создать отдельную строку соединения для каждого потока (.NET Data.Sqlite.dll). Если вы используете другую реализацию (например, любую обертку для Android), иногда все по-другому.