Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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++_Windows_Sqlite_Locking - Fatal编程技术网

C++ SQLite3和锁的释放

C++ SQLite3和锁的释放,c++,windows,sqlite,locking,C++,Windows,Sqlite,Locking,SQLite有不同级别的锁:未锁定、共享、保留、挂起和独占 我找不到调用SQLite API获取和释放锁定的信息 据我所知,调用sqlite3_步骤时获得了锁。锁的类型取决于准备语句的表达式。此外,此命令还可以升级自定义事务内的锁定写入操作 据我所知,写入锁也是由sqlite3\u步骤释放的-此func返回SQLITE\u DONE或错误代码。我没有找到任何文档,但是这个函数应该在执行结束时释放RESERVED/PENDING/EXCLUSIVE,这似乎是合理的 但我不明白读操作会发生什么。 要

SQLite有不同级别的锁:未锁定、共享、保留、挂起和独占

我找不到调用SQLite API获取和释放锁定的信息

据我所知,调用sqlite3_步骤时获得了锁。锁的类型取决于准备语句的表达式。此外,此命令还可以升级自定义事务内的锁定写入操作

据我所知,写入锁也是由sqlite3\u步骤释放的-此func返回SQLITE\u DONE或错误代码。我没有找到任何文档,但是这个函数应该在执行结束时释放RESERVED/PENDING/EXCLUSIVE,这似乎是合理的

但我不明白读操作会发生什么。 要获取所有查询的行,我们需要多次调用sqlite3_步骤——每次调用都会给出一行

我从Unlock notify API中找到了关于操作系统缓存和引用的SQLite文档:不可能一次调用sqlite3_步骤就返回SQLite_行,然后下一个SQLite_被锁定

我假设在读操作中,对sqlite3_步骤的第一个调用获取共享锁,并将数据从文件加载到OS缓存。如果sqlite3\u步骤返回除SQLITE\u行以外的任何内容,即SQLITE\u DONE或错误代码,则释放锁

是这样吗


如何手动释放获取的锁以进行读取操作?sqlite3\u重置?

SQLite在sqlite3\u准备中获取对数据库/表的锁定,并在sqlite3\u最终确定中释放它。 锁的类型取决于SQL表达式

因此,如果您创建了一个STMT-您需要执行它并尽快完成。否则会阻止不同的连接

例如:
如果为SELECT表达式创建了STMT,则获得了共享锁。因此,在STMT完成之前,来自不同连接的所有写入操作都会被阻止。

SQLite在sqlite3\u prepare中获取数据库/表的锁,并在sqlite3\u finalize中释放它。 锁的类型取决于SQL表达式

因此,如果您创建了一个STMT-您需要执行它并尽快完成。否则会阻止不同的连接

例如:
如果为SELECT表达式创建了STMT,则获得了共享锁。因此,在STMT最终完成之前,来自不同连接的所有写入操作都将被阻止。

请阅读关于和的文档。请阅读关于和的文档。不幸的是,这是错误的。在sqlite3\u prepare中没有获取锁。您可以使用sqlite3_reset来释放语句在其准备的语句被重置或最终确定时完成的锁。-,所以你不需要sqlite3_尽快完成。不幸的是,这是错误的。在sqlite3\u prepare中没有获取锁。您可以使用sqlite3_reset来释放语句在其准备的语句被重置或最终确定时完成的锁。-,因此,您不需要尽快完成sqlite3。