相关疑难解决方法(0)

进程间SQLite线程安全(在iOS上)

我正在尝试确定我的sqlite访问数据库是否在iOS上是线程安全的.我正在编写一个非App Store应用程序(或可能是一个启动守护程序),因此Apple的批准不是问题.有问题的数据库是内置的sms.db,因此操作系统也可以访问此数据库进行读写.我只想安全地阅读它.

我已经阅读过有关使用sqlite从多个进程读取的内容:

多个进程可以同时打开同一个数据库.多个进程可以同时执行SELECT.但是,只有一个进程可以随时对数据库进行更改.

我知道线程安全性可以用sqlite编译,并且sqlite3_threadsafe()可以用来测试它.在iOS 5.0.1上运行此功能

int safe = sqlite3_threadsafe();
Run Code Online (Sandbox Code Playgroud)

产生的2的结果 根据本,这意味着互斥锁定是可用的.但是,这并不一定意味着它正在使用中.

我不清楚是否在每个连接,每个数据库或全局基础上动态启用了线程安全性.

我也读过这个.它看起来sqlite3_config()可用于启用安全的多线程,但当然,我无法控制或了解操作系统本身可能如何使用此调用(我吗?).如果我在我的应用程序中再次进行该调用,是否可以安全地读取数据库,或者它是否只会对我的应用程序中使用相同sqlite3数据库句柄的多个线程的并发访问产生冲突?

无论如何,我的问题是......

我可以安全地读取iOS也可以访问的这个数据库,如果是这样,怎么样?

sqlite thread-safety jailbreak ios

9
推荐指数
1
解决办法
7324
查看次数

设置sqlite配置SQLITE_CONFIG_SERIALIZED在iOS 5上返回SQLITE_MISUSE

随着iOS 5的发布,我们在为sqlite数据库设置序列化选项时会遇到越来越多的错误(因此将其保存用于多线程).我们在sqlite3_config上收到SQLITE_MISUSE错误代码.有人注意到这种奇怪的行为吗?有人知道如何解决这个问题吗?它在之前的iOS版本上运行得非常好.

这是代码:

- (sqlite3 *)getNewDBConnection {
    NSLog(@"sqlite3 lib version: %s", sqlite3_libversion());

    //sqlite3_config() has to be called before any sqlite3_open calls.

    if (sqlite3_threadsafe() > 0) {
        int retCode = sqlite3_config(SQLITE_CONFIG_SERIALIZED);
        if (retCode == SQLITE_OK) {
            NSLog(@"Can now use sqlite on multiple threads, using the same connection");
        } else {
            NSLog(@"setting sqlite thread safe mode to serialized failed!!! return code: %d", retCode);
        }
    } else {
        NSLog(@"Your SQLite database is not compiled to be threadsafe.");
    }

    sqlite3 *newDBconnection;

    // Open the …
Run Code Online (Sandbox Code Playgroud)

sqlite iphone ios5

3
推荐指数
1
解决办法
6498
查看次数

标签 统计

sqlite ×2

ios ×1

ios5 ×1

iphone ×1

jailbreak ×1

thread-safety ×1