Thread-segurança e modificação concorrente de uma tabela no SQLite3

votos
4

O thread-segurança do SQLite3 significar diferentes segmentos podem modificar a mesma mesa de um banco de dados simultaneamente?

Publicado 10/12/2008 em 08:17
fonte usuário
Em outras línguas...                            


4 respostas

votos
6

Não - SQLite não suporta acesso de gravação simultânea para o mesmo arquivo de banco de dados. SQLite vai simplesmente bloquear uma das transações até que o outro tenha terminado.

Respondeu 30/07/2009 em 21:54
fonte usuário

votos
4

Observe que, se você estiver usando python, para acessar uma conexão sqlite3 de diferentes tópicos que você precisa para desativar o check_same_threadargumento, por exemplo:

sqlite.connect ( ": memória:", check_same_thread = False)

a partir de 24 de Maio de 2010, os docs omitir esta opção. a omissão é listado como um bug aqui

Respondeu 24/05/2010 em 06:11
fonte usuário

votos
1

Você pode usar SQLite em 3 modos diferentes:

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

Se você decidir para o modo multi-thread ou modo serializado, você pode fácil SQLite uso em aplicativos multi-thread. Nessas situações você pode ler a partir de todos os seus threads simultaneamente de qualquer maneira. Se você precisa escrever simultaneamente, a tabela aberta será automatycally bloqueio para a linha de escrita atual e desbloquear depois que (próximo tópico será espera (mutex), por sua vez, até que a tabela será desbloqueado). Em todos esses casos, você precisa criar seqüência de conexão separada para cada thread (.NET Data.Sqlite.dll). Se você estiver usando outra aplicação (por exemplo, qualquer invólucro Android), por vezes, as coisas são diferentes.

Respondeu 17/06/2013 em 12:50
fonte usuário

votos
1

Não necessariamente. Se sqlite3 é compilado com a macro thread-safe (verifique através do

sqlite3_threadsafe int (void)
função), então você pode tentar acessar o mesmo DB de vários segmentos sem o risco de corrupção. Dependendo do bloqueio (s) necessário, no entanto, você pode ou não ser capaz de realmente modificar dados (eu não acredito sqlite3 suporta bloqueio de linha, o que significa que para escrever, você precisa obter um bloqueio de tabela). No entanto, você pode tentar; se enfia blocos, em seguida, ele será automaticamente escrever, logo que o outro segmento termina com o DB.

Respondeu 10/12/2008 em 08:23
fonte usuário

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