zoukankan      html  css  js  c++  java
  • iOS 数据库多线程操作

    SQLite是支持多线程操作的, 需要在初始化database是做一个线程安全的config,参考下面链接,看起来比较复杂。

    http://www.cnblogs.com/wfwenchao/p/3964213.html

    很多iOS项目中都使用FMDB这个第三方开源库,但FMDB不能在多个线程中共同一个FMDatabase对象,因为这个类本身不是线程安全的,如果这样使用会造成数据混乱等问题。

    如要需要多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了。 

    首先用一个数据库文件地址来初使化FMDatabaseQueue,然后就可以将一个闭包(block)传入inDatabase方法中。 在闭包中操作数据库,而不直接参与FMDatabase的管理。

    FMDatabaseQueue解决这个问题的思路是:创建一个队列,然后将放入队列的block顺序执行,这样避免了多线程同时访问数据库;

    如果是多线程各创建FMDatabaseQueue的实例,其实有多个队列,还是存在数据库竞争的问题,和用FMDatabase时是一样的;

    让每个线程使用同一个Queue实例,问题就顺利解决了;

    参考:

    1) http://blog.csdn.net/kyfxbl/article/details/38123239

    2) http://blog.devtang.com/blog/2012/04/22/use-fmdb/

  • 相关阅读:
    [bzoj4893]项链分赃
    [Spoj]Counting Divisors (cube)
    [Noi2016]国王饮水记
    [Noi2016]网格
    [Noi2016]优秀的拆分
    [Noi2016]区间
    [Noi2015]寿司晚宴
    Codeforces Round #411 (Div. 2)
    VK-Cup2017 Wild Card Round 2
    [Noi2015]小园丁和老司机
  • 原文地址:https://www.cnblogs.com/samniu/p/4555577.html
Copyright © 2011-2022 走看看