小。速度很快。可靠。
选择任意三个选项。
在多线程应用程序中使用SQLite

1概述

SQLite支持三种不同的线程模式:

  1. 单螺纹.在这种模式下,所有互斥锁都被禁用,SQLite在中使用是不安全的一次不止一个线程。

  2. 多线程.在这种模式下,SQLite可以被多个线程安全使用,前提是没有单身数据库连接也不是从数据库连接派生的任何对象,例如准备好的报表,同时在两个或多个线程中使用。

  3. 已序列化.在序列化模式下,API调用影响或使用任何SQLite数据库连接或从此类数据库连接派生的任何对象可以从多个线程安全地创建。对单个对象的影响与API调用具有所有从单个线程按相同顺序制作。名称“序列化”产生于这样一个事实,即SQLite使用互斥来串行化对每个对象。

可以在编译时选择线程模式(当SQLite库正在从源代码编译)或在启动时(当打算使用SQLite的应用程序正在初始化)或运行时(创建新的SQLite数据库连接时)。一般来说,运行时覆盖starttime和starttimE覆盖编译时间。但是,单线程模式不能选择后被覆盖。

默认模式是序列化的。

2线程模式的编译时选择

使用SQLITE_THREADSAFE(SQLITE_HREADSAFE)编译时间参数以选择线程模式。如果没有SQLITE_THREADSAFE(SQLITE_HREADSAFE)编译时参数为显示,然后使用序列化模式。这可以通过-DSQLITE_THREADSAFE=1.使用-DSQLITE_THREADSAFE=0线程模式为单螺纹。使用-DSQLITE_THREADSAFE=2线程模式为多线程。

的返回值sqlite3_threadsafe()接口是值编译时设置的SQLITE_THREADSAFE。它不反映变化到运行时通过sqlite3_config()接口或通过作为第三个参数的标志sqlite3_open_v2().

如果在编译时选择了单线程模式,则为关键构建中省略了互斥逻辑,因此不可能在启动时启用多线程或序列化模式,或运行时。

三。线程模式的开始时间选择

假设编译时线程模式不是单线程,那么可以在初始化期间使用sqlite3_config()接口。这个SQLITE_CONFIG_SINGLETHREAD公司动词将SQLite置于单线程模式SQLITE_CONFIG_MULTITHREAD数据库动词设置多线程模式已初始化SQLITE_CONFIG_SERIALIZED动词设置序列化模式。

4.线程模式的运行时选择

如果在编译时或启动时未选择单线程模式,然后可以将单个数据库连接创建为任一多线程或序列化。无法降级单个数据库连接到单线程模式。也不可能升级编译时或启动时模式下的单个数据库连接为单螺纹。

确定单个数据库连接的线程模式通过作为第三个参数的标志sqlite3_open_v2(). TheSQLITE_OPEN_NOMUTEX公司标志使数据库连接位于多线程模式和SQLITE_OPEN_FULLMUTEX公司标志导致连接处于序列化模式。如果未指定标志或如果sqlite3_open()sqlite3_open16()使用,而不是sqlite3_open_v2(),然后是默认值使用由编译时间和启动时间设置确定的模式。

此页面上次修改时间2023-12-05 14:43:20联合技术公司