【发布时间】:2012-02-10 22:30:26
【问题描述】:
【问题讨论】:
标签: ios multithreading sqlite ios5
【问题讨论】:
标签: ios multithreading sqlite ios5
好的,所以 sqlite3_threadsafe() 返回 2,所以它在 iOS 上使用 SQLITE_CONFIG_MULTITHREAD 编译。不幸的是,我本来希望序列化的。
sqlite3_config(SQLITE_CONFIG_SERIALIZED) 不幸地给了我 SQLITE_MISUSE
【讨论】:
sqlite3_open_v2(sqliteFilePath, &sqlite, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX, NULL);
根据这个答案 - https://stackoverflow.com/a/7799021/40444
看来您可以执行以下操作:
sqlite3_shutdown();
if (sqlite3_config(SQLITE_CONFIG_SERIALIZED) == SQLITE_OK) {
NSLog(@"sqlite configured to be threadsafe);
}
sqlite3_initialize();
但目前尚不清楚这是否正式有效。
【讨论】:
sqlite3_threadsafe() 并没有显示任何差异...
答案是多线程。 我们可以使用 sqlite3_threadsafe() 来检查,它返回 2。
0 - Single-thread
2 - Multi-thread
1 - Serialized
问:@Ben Marten “不幸的是,记录 sqlite3_threadsafe() 没有显示任何 应用设置后的差异..."
A: sqlite3_threadsafe() 仅报告编译时互斥锁设置 [SQLITE_THREADSAFE] 标志。
sqlite3_threadsafe()接口的返回值确定 由编译时线程模式选择。如果单线程模式是 在编译时选择,然后 sqlite3_threadsafe() 返回 false。如果 选择多线程或序列化模式,然后 sqlite3_threadsafe() 返回真。 sqlite3_threadsafe() 接口 早于多线程模式以及启动时和运行时模式 selection 等无法区分多线程和 序列化模式也不能报告开始时间或运行时间模式 变化。
【讨论】: