Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS中的Sqlite3并发问题_Ios_Sqlite - Fatal编程技术网

IOS中的Sqlite3并发问题

IOS中的Sqlite3并发问题,ios,sqlite,Ios,Sqlite,我在iOS应用程序中使用SQLite 3。它需要大量的读/写操作,其中许多操作是同时进行的。这些函数中的大多数都在不同的线程中运行,但是访问相同的数据库 以下是我想到的几种方法: 在每次数据库访问(读/写)时,我都会将一个标志设置为database\u open=YES,如果它为真,我会在几秒钟后重试。我可以把函数放在数据库层本身 在同一线程中运行所有数据库操作。然而,我的用例是这样的,我需要等待一些HTTP调用完成并将检索到的数据存储到SQLite中。对于这个方法,我必须使所有这些服务器调用也

我在iOS应用程序中使用SQLite 3。它需要大量的读/写操作,其中许多操作是同时进行的。这些函数中的大多数都在不同的线程中运行,但是访问相同的数据库

以下是我想到的几种方法:

  • 在每次数据库访问(读/写)时,我都会将一个标志设置为
    database\u open=YES
    ,如果它为真,我会在几秒钟后重试。我可以把函数放在数据库层本身

  • 在同一线程中运行所有数据库操作。然而,我的用例是这样的,我需要等待一些HTTP调用完成并将检索到的数据存储到SQLite中。对于这个方法,我必须使所有这些服务器调用也同步。不是最好的主意


  • 如果我想的方向不对,请提出建议。

    SQLite。只需配置SQLITE_CONFIG_多线程模式,并分别从每个线程打开数据库。

    offtopic:您应该试一试。FMDB是线程保存的,并且有一个非常简单的SQL语句接口。或者,更准确地说,您可以使用FMDB的
    FMDatabaseQueue
    ,作为一种机制,通过拥有一个单独的串行队列来协调来自不同线程的数据库交互,这两个线程将调度任何数据库交互。即使您不使用FMDB,您也可以使用此模式来协调来自不同线程的数据库交互,拥有自己的串行队列,您将向其中分派所有这些交互。谢谢各位。这似乎解决了我的问题。我读了他们的FMDatabaseQueue,它正是我所需要的