Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
C Sqlite3如何识别表锁定状态,然后插入_C_Linux_Sqlite - Fatal编程技术网

C Sqlite3如何识别表锁定状态,然后插入

C Sqlite3如何识别表锁定状态,然后插入,c,linux,sqlite,C,Linux,Sqlite,我正在fedora linux中使用sqlite3 3.6.23.1版本。我有两个线程正在运行以访问数据库。两个线程都有可能尝试在同一个表中执行写操作 当第一个线程执行写操作时,表被锁定。我如何处理这种情况 是否存在任何C、SQLITE3API机制,如等待然后写入表,直到另一个线程完成写入操作 谢谢和问候 -praveen有一种“共享缓存”模式,可以通过C API进行设置,如前所述 Sqlite3在最大化并发性方面做得很好,而且它也是线程安全的。有关更多详细信息,请参阅 在写操作期间,表确实会被

我正在fedora linux中使用sqlite3 3.6.23.1版本。我有两个线程正在运行以访问数据库。两个线程都有可能尝试在同一个表中执行写操作

当第一个线程执行写操作时,表被锁定。我如何处理这种情况

是否存在任何C、SQLITE3API机制,如等待然后写入表,直到另一个线程完成写入操作

谢谢和问候

-praveen

有一种“共享缓存”模式,可以通过C API进行设置,如前所述

Sqlite3在最大化并发性方面做得很好,而且它也是线程安全的。有关更多详细信息,请参阅

在写操作期间,表确实会被锁定,但sqlite3可以通过等待释放锁,然后将锁授予想要执行写(或读)操作的第二个进程/线程,来导航这种情况。可以在sqlite连接代码中配置等待锁定的超时。以下是Python 2.7的语法:

sqlite3.connect(database[, timeout, detect_types, isolation_level, 
                check_same_thread, factory, cached_statements])
默认超时为5.0秒。因此,需要一个相当庞大的SELECT或COMMIT事务才能在该时间段内保持一个锁。但是,根据您的用例,您可以调整超时或包含代码以捕获超时异常

最后一种选择是在代码中加入某种标记机制,这要求竞争线程在尝试访问DB之前等待标记清除,但这重复了sqlite3开发人员的工作,他们将并发场景作为其工作的主要部分

下面是一篇有趣的文章,概述了一个问题,即当无法获取锁时