1.概述SQLite支持三种不同的线程模式:
- 单线程 。在此模式下,所有互斥锁都被禁用,并且SQLite一个链接不能在多个线程中使用 。
- 多线程 。在这种模式下,只要在两个或多个线程中不同时使用单个数据库连接,SQLite就可以被多个线程安全地使用 。
- 串行模式 。在串行模式下,SQLite可以被多个线程安全地使用而没有任何限制 。
注意:默认的模式是串行模式 。
文章插图
2.编译时选择线程模式编译时参数使用SQLITE_THREADSAFE表示线程模式 。如果编译时参数不存在SQLITE_THREADSAFE,则使用串行模式 。这可以通过-DSQLITE_THREADSAFE = 1显式化。使用 -DSQLITE_THREADSAFE = 0时,线程模式是单线程 。使用 -DSQLITE_THREADSAFE = 2时,线程模式是多线程的 。
sqlite3_threadsafe()接口 的返回值由编译时线程模式选择决定 。如果在编译时选择了单线程模式,则sqlite3_threadsafe()返回false 。如果选择了多线程或串行模式,则 sqlite3_threadsafe()返回true 。该sqlite3_threadsafe() 接口早在多线程模式和启动时间和运行时间模式选择,因此是无法多线程和串行模式,也没有区分是它能够报告开始时间或运行时模式的变化 。
【在多线程应用程序中使用SQLite】如果在编译时选择单线程模式,则从编译中忽视一些重要的逻辑,所以无法在启动时或运行时启用多线程或串行模式 。
3.线程模式的开始时间选择假设编译时线程模式不是单线程,则可以在初始化期间使用sqlite3_config()接口更改线程模式。该SQLITE_CONFIG_SINGLETHREAD动词设置SQLite为单线程模式,SQLITE_CONFIG_MULTITHREAD 动词设置SQLite为多线程模式,SQLITE_CONFIG_SERIALIZED动词设置SQLite为串行模式 。
4.运行时选择串行模式如果在编译时或启动时未选择单线程模式,则可以将单个数据库连接创建为多线程或串行化 。无法将单个数据库连接降级为单线程模式 。如果编译时或开始时模式是单线程,也不可能升级单个数据库连接 。
单个数据库连接的线程模式由作为sqlite3_open_v2()的第三个参数给出的标志确定 。所述 SQLITE_OPEN_NOMUTEX标志导致数据库连接是在多线程模式和SQLITE_OPEN_FULLMUTEX标志使是在串行化模式的连接 。如果未指定任何标志或者使用 sqlite3_open()或sqlite3_open16()而不是sqlite3_open_v2(),则使用由编译时和开始时设置确定的默认模式 。
推荐阅读
- 我在香港遇见他 我在香港遇见他陈茗轩是好是坏
- 2020星巴克福袋 星巴克2020圣诞福袋在哪买
- 内裤用小苏打浸泡多久 小苏打洗内裤有抑菌作用吗
- 怎么设置tomcat在get请求的中文也不乱码?两种情况下配置
- 入驻淘宝需要什么条件要多少钱 淘宝入驻费用和其他费用
- 在CentOS8或RHEL8上安装Apache httpd
- 大芒果一个有多重 一个大芒果多少斤
- 梦见好多小鱼活蹦乱跳 梦见好多小鱼在水里游
- 梦见自己身上沾了很多屎和血 梦见自己身上沾了很多屎又变成血
- 网站上线前的终极测试清单