作者:继续微笑丶保持硪的骄傲_195 | 来源:互联网 | 2022-12-24 21:48
1> lenilsondc..:
事实证明,SQLITE_CONFIG_MULTITHREAD
只要您不同时使用相同的连接,模式在多线程环境中运行良好; 这恰好是我的确切场景.因此,要解决此问题,您可以为每个线程打开一个新连接,也可以SQLITE_CONFIG_SERIALIZED
使用SQLITE_OPEN_FULLMUTEX
标志在完全互斥模式下打开连接.
辅助方法最终如下:
+(sqlite3*) getInstance {
if (instance == NULL) {
sqlite3_shutdown();
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
sqlite3_initialize();
NSLog(@"isThreadSafe %d", sqlite3_threadsafe());
const char *path = [@"./path/to/db/db.sqlite" cStringUsingEncoding:NSUTF8StringEncoding];
if (sqlite3_open_v2(path, &database, SQLITE_OPEN_READWRITE|SQLITE_OPEN_FULLMUTEX, NULL) != SQLITE_OK) {
NSLog(@"Database opening failed!");
}
}
return instance;
}