C Sqlite3如何识别表锁定状态,然后插入
我正在fedora linux中使用sqlite3 3.6.23.1版本。我有两个线程正在运行以访问数据库。两个线程都有可能尝试在同一个表中执行写操作 当第一个线程执行写操作时,表被锁定。我如何处理这种情况 是否存在任何C、SQLITE3API机制,如等待然后写入表,直到另一个线程完成写入操作 谢谢和问候 -praveen有一种“共享缓存”模式,可以通过C API进行设置,如前所述 Sqlite3在最大化并发性方面做得很好,而且它也是线程安全的。有关更多详细信息,请参阅 在写操作期间,表确实会被锁定,但sqlite3可以通过等待释放锁,然后将锁授予想要执行写(或读)操作的第二个进程/线程,来导航这种情况。可以在sqlite连接代码中配置等待锁定的超时。以下是Python 2.7的语法:C Sqlite3如何识别表锁定状态,然后插入,c,linux,sqlite,C,Linux,Sqlite,我正在fedora linux中使用sqlite3 3.6.23.1版本。我有两个线程正在运行以访问数据库。两个线程都有可能尝试在同一个表中执行写操作 当第一个线程执行写操作时,表被锁定。我如何处理这种情况 是否存在任何C、SQLITE3API机制,如等待然后写入表,直到另一个线程完成写入操作 谢谢和问候 -praveen有一种“共享缓存”模式,可以通过C API进行设置,如前所述 Sqlite3在最大化并发性方面做得很好,而且它也是线程安全的。有关更多详细信息,请参阅 在写操作期间,表确实会被
sqlite3.connect(database[, timeout, detect_types, isolation_level,
check_same_thread, factory, cached_statements])
默认超时为5.0秒。因此,需要一个相当庞大的SELECT或COMMIT事务才能在该时间段内保持一个锁。但是,根据您的用例,您可以调整超时或包含代码以捕获超时异常
最后一种选择是在代码中加入某种标记机制,这要求竞争线程在尝试访问DB之前等待标记清除,但这重复了sqlite3开发人员的工作,他们将并发场景作为其工作的主要部分
下面是一篇有趣的文章,概述了一个问题,即当无法获取锁时