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