3
WAL 모드에서 sqlite가 동일한 데이터베이스에서 동시에 여러 트랜잭션을 처리 할 수 있습니까?다중 스레드에서 다중 트랜잭션이있는 SQLite WAL 모드
다음은 500 개의 스레드를 생성하고 각 스레드가 새 sqlite 연결을 만드는 샘플 응용 프로그램입니다. 데이터 삽입은 트랜잭션 내에서 발생합니다. 이 샘플 응용 프로그램에서
:
#include "sqlite3.h"
#include "nspr\prthread.h"
void CreateThreads();
static void StartThread(void *Arg);
int main()
{
CreateThreads();
}
void CreateThreads()
{
for(int i = 0; i<500;i++)
{
PR_CreateThread(PR_USER_THREAD, StartThread, NULL, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_UNJOINABLE_THREAD, 0);
}
Sleep(10000);
}
void StartThread(void *Arg)
{
sqlite3 *sqlite;
char *errmsg;
const char *err;
const char *unused;
int ret;
const unsigned char * journal;
const char *dir = "D:\\Samples\\test.sqlite";
ret = sqlite3_open(dir, &sqlite);
if(ret != SQLITE_OK)
{
err = sqlite3_errmsg(sqlite);
return;
}
char query[100];
strcpy(query, "Begin transaction");
if(sqlite3_exec(sqlite, query, NULL,0, &errmsg) != SQLITE_OK)
{
printf("%s", errmsg);
return;
}
strcpy(query, "insert into test values(1,2,3,4,5,6)");
for(int i = 0; i<10;i++)
{
if(sqlite3_exec(sqlite, query, NULL,0, &errmsg) != SQLITE_OK)
{
printf("%s", errmsg);
return;
}
}
strcpy(query, "End Transaction");
if(sqlite3_exec(sqlite, query, NULL,0, &errmsg) != SQLITE_OK)
{
printf("%s", errmsg);
return;
}
return;
}
나는 '데이터베이스가 잠겨'이 실행 얻을.
제 질문은 WAL 모드와 동시에 여러 번 처리 할 수 있습니까? 그렇다면 샘플 앱에서 나는 무엇을 놓치고 있습니까?
어떤 저널 모드가 WAL로 설정되어있는 경우는 어떻습니까? – Sandy