zoukankan      html  css  js  c++  java
  • sqlite报SQLITE_LOCKED "Database table is locked"

    今天调了一天程序,最后远程的ORACLE都好,做下压力测试.惊奇的发现SQLITE报错..

    说什么数据表锁了.....

    结果调到了现在...很是郁闷.

    情况如下:

    每个线程打开自己的SQLITE连接.线程间不混用.

    1 if (sqlite3_open_v2(strdb, \
    2 db, \
    3 SQLITE_OPEN_READWRITE | \
    4 SQLITE_OPEN_CREATE | \
    5 SQLITE_OPEN_NOMUTEX | \
    6 SQLITE_OPEN_SHAREDCACHE, \
    7 NULL) != SQLITE_OK)
    8 {
    9 fprintf(stderr, "sqlite3_open: %s\n", sqlite3_errmsg(*db));
    10 return -1;
    11 }

    其中,SQLITE_OPEN_FULLMUTEX,SQLITE_OPEN_SHAREDCACHE都不行.我试过了.

    A线程往T1插数据.里面用到了事务.并不长.

    B线程往T2插数据.也用到了事务.也不长.

    但是,AB之间插入时间是随机的.我发现,只是要A往T1插数据,紧跟着B往T2插数据.就一定会报错.

    反之一样.

    我又试了一下,A往T1插数据.启用事务. B往T2插数据.不启用事务.循环插入(暂不考虑效率)  一样报错...报的错也一样..

    这觉得SQLITE没有真正的线程安全. 它没有做到SESSION这一级.只是连接式的线程安全.

    后来在应该程序里..把两个事务用锁隔开.解决问题..记录之

    很开心,希望能对别人有用.

  • 相关阅读:
    More Effective C++: 02操作符
    More Effective C++: 01基础议题
    GCD学习(七) dispatch_apply
    GCD学习(六) dispatch_async 和dispatch_sync
    GCD学习(五) dispatch_barrier_async
    GCD 学习(四) dispatch_group
    关于 block的一些浅识
    异常日志记录 DDLog
    Effective Objective-C [下]
    Effective Objective-C [上]
  • 原文地址:https://www.cnblogs.com/javado/p/1895055.html
Copyright © 2011-2022 走看看