单线程:这种模式下,没有进行互斥,多线程使用不安全。禁用所有的mutex锁,并发使用时会出错。当sqlite编译时加了sqlITE_THREADSAFE=0参数,或者在初始化sqlite前调用sqlite3_config(sqlITE_CONFIG_SINGLETHREAD)时启用。
多线程:这种模式下,只要一个数据库连接不被多个线程同时使用就是安全的。源码中是启用bCoreMutex,禁用bFullMutex。实际上就是禁用数据库连接和prepared statement(准备好的语句)上的锁,因此不能在多个线程中并发使用同一个数据库连接或prepared statement。当sqlite编译时加了sqlITE_THREADSAFE=2参数时默认启用。若sqlITE_THREADSAFE不为0,可以在初始化sqlite前,调用sqlite3_config(sqlITE_CONFIG_MULTITHREAD)启用;或者在创建数据库连接时,设置sqlITE_OPEN_NOMUTEX flag。
编译时选择线程模式
启动时选择线程模式
运行时选择线程模式