3
sqlite可以在WAL模式下同時在同一個數據庫上執行多個事務嗎?在多線程中有多個事務的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