是否可以在另一个线程上运行sqlite3_exec()?

时间:2013-09-03 08:57:20

标签: objective-c sqlite

正如标题所述:是否可以在另一个线程中运行方法sqlite3_exec()

TBXMLSuccessBlock sBlock = ^(TBXML *tbxmlDocument) {
    xmlArray = [NSMutableArray array];

    if (tbxmlDocument.rootXMLElement)
        [self fillArrayWithXmlContents:tbxmlDocument.rootXMLElement];

    for (int i = 0; i < xmlArray.Count; i++)
        sqlite3_exec(db, "Query that uses xmlArray values", 0, 0, 0);
};

正如您所看到的,这是一个正在另一个线程上执行的块。

2 个答案:

答案 0 :(得分:2)

我推荐你sqlite3 FAQ

  

SQLite线程安全吗?

     

线程是邪恶的。避免它们。

     

SQLite是线程安全的。我们做出这种让步,因为许多用户选择   忽略前一段中给出的建议。但为了   要是线程安全的,SQLite必须使用SQLITE_THREADSAFE进行编译   预处理器宏设置为1. Windows和Linux都经过预编译   分发中的二进制文件以这种方式编译。 blah blah blah

所以我会说“是”,应该没问题。

答案 1 :(得分:1)

答案是“也许是,也许不是”。

我建议你阅读SQLite FAQ entry on thread-safety并查看你的其余代码和你链接的sqlite3库。