Резьбонарезной безопасность и одновременно модификация таблицы в SQLite3

голоса
4

токарно-безопасность SQLite3 Означает ли разные потоки могут изменить ту же таблицу базы данных одновременно?

Задан 10/12/2008 в 08:17
источник пользователем
На других языках...                            


4 ответов

голоса
6

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

Ответил 30/07/2009 в 21:54
источник пользователем

голоса
4

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

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

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

Ответил 24/05/2010 в 06:11
источник пользователем

голоса
1

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

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

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

Ответил 17/06/2013 в 12:50
источник пользователем

голоса
1

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

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

Ответил 10/12/2008 в 08:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more