SQLite 多线程
发布时间:2020-12-12 23:55:55 所属栏目:百科 来源:网络整理
导读:http://blog.sina.com.cn/s/blog_a459dcf50101496d.html SQLite支持3种线程模式: 单线程 : 这种模式下,没有进行互斥,多线程使用不安全。 禁用所有的mutex锁,并发使用时会出错。当SQLite编译时加了SQLITE_THREADSAFE=0参数,或者在初始化SQLite前调用sql
http://blog.sina.com.cn/s/blog_a459dcf50101496d.html SQLite支持3种线程模式: 单线程: 这种模式下,没有进行互斥,多线程使用不安全。 禁用所有的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。 串行: sqlite是线程安全的。 启用所有的锁,包括bCoreMutex和bFullMutex 。因为数据库连接和prepared statement都已加锁,所以多线程使用这些对象时没法并发,也就变成串行了。当SQLite编译时加了SQLITE_THREADSAFE =1参数时默认启用。若SQLITE_THREADSAFE不为0,可以在初始化SQLite前,调用sqlite3_config(SQLITE_CONFIG_SERIALIZED)启用;或者在创建数据库连接时,设置SQLITE_OPEN_FULLMUTEX flag 启动时选择线程模式 运行时选择线程模式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |