-
易语言支持的sqlite3.30.1数据库模块及其配套库已成功解决多线程死锁问题
资源介绍
本次更新对于支持库来说,接口改动不大,模块版的话是尽量和支持库接口保持一致,所以对于以前的模块接口可能改动就大了。
要解决多线程问题,主要是对sqlite3的锁机制进行了解,和事务有密切的关系。本次更新的版本在开始事务时,增加了一个 事务锁状态 的参数。
拿简单的话来描述就是 开始事务 时如果
设置了
事务锁状态_ 立即
参数,那么这个时候其他线程的连接就不能写操作了,但是可以读操作,但是在提交事务时也要等待所有读操作完成了才能提交。
设置了
事务锁状态_ 独占
参数,那么这个时候其他线程的连接读写都不可以了。
在等待的时候就处于繁忙状态,我们可以设置
数据库.繁忙超时
()来设置等待时间。
还有种情况还是会
死锁
,就是记录集没有关闭,而且这次更新的支持库和模块都是必须
手动关闭记录集
的,所以一定注意。
当然多进程和多线程是一个道理,具体操作看例子。
esqlite3 V1.1 相对于1.0的更新
1、增加了全局命令:
S3互斥体进入
S3互斥体退出
S3聚合上下文
S3取数据库自上下文
2、增加了zySqlite数据库 命令
繁忙超时
繁忙处理
取文件名
是否只读
取互斥体
是否自动提交
进度处理
取下一记录集
取总影响行
3、增加了 zySqlite记录集 命令
是否繁忙
是否只读
取数据库句柄
取行数
4、数据库.开始事务() 增加了 事务锁状态 参数,此参数在多线程中非常重要。
5、记录集必须手动关闭,任何内部方法都不再自动关闭。