SQLite线程模式

SQLite支持不同的线程模式:

1、  Single-thread。这种模式下,锁会失效,多线程同时使用不安全。

2、  Multi-thread。这种模式下,每个线程需要使用它们各自的连接,一个连接不能同时被多个线程使用。

3、  Serialized。这种模式下,是多线程安全的。

 

线程模式可以在编译期(编译SQLite库)、初始化期(应用开始使用SQLite)、运行期(创建连接)选择。通常,运行期会覆盖初始化期的选择,初始化期会覆盖编译器的选择。但是,一旦Single-thread不能被覆盖。

默认为Serialized。


编译期选择线程模式

使用SQLITE_THRWADSAFE选项去选择线程模式。如果没指定该选项,会使用Serialized。

-DSQLITE_THREADSAFE=0:Single-thread

-DSQLITE_THREADSAFE=1:Multi-thread

-DSQLITE_THREADSAFE=2:Serialized

接口sqlite3_threadsafe()返回值指向的是编译期选定的线程模式。false表示Single-thread,true表示Multi-thread或Serialized。

如果在编译期选择Single-thread,锁逻辑在构建时会被忽略,所以不能在初始化期或运行期改成Multi-thread或Serialized。

 

初始化期选择线程模式

sqlite3_config()接口

 

运行期选择线程模式

不能在运行期将单个连接的模型选为single-thread

sqlite3_open_v2()接口:

SQLITE_OPEN_NOMUTEX标志会选择multi-thread,SQLITE_OPEN_FULLMUTEX标志会选择serialized

没指定标志会使用编译期和初始化期的线程模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值