2

タイトルが示すように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);
};

ご覧のとおり、これは別のスレッドで実行されているブロックです。

4

2 に答える 2

2

sqlite3 FAQを参照してください。

SQLite はスレッドセーフですか?

スレッドは悪です。それらを避けてください。

SQLite はスレッドセーフです。多くのユーザーが前の段落で与えられたアドバイスを無視することを選択するため、この譲歩を行います。ただし、スレッドセーフにするために、SQLite は SQLITE_THREADSAFE プリプロセッサ マクロを 1 に設定してコンパイルする必要があります。ディストリビューション内の Windows と Linux の両方のプリコンパイル済みバイナリは、この方法でコンパイルされます。何とか何とか何とか

だから私は「はい」と言うでしょう、それは大丈夫です。

于 2013-09-03T09:10:28.867 に答える
1

答えは「イエスかもしれない、ノーかもしれない」です。

スレッド セーフに関する SQLite FAQ エントリを読み、残りのコードとリンク先の sqlite3 ライブラリを確認することをお勧めします。

于 2013-09-03T09:09:20.270 に答える