SQLite学习笔记(8)
线程: SQLite的很多版本支持多线程。 共享缓存模型: 允许一个进程中的多个连接使用共同的页缓存。用于嵌入式服务器的情况比较多。 Thread →Server→con→Page Cache→database。 共享缓存模式中,线程依赖于服务器线程帮助管理数据库连接。线程通过某种通信机制想服务器发送SQL语句,服务器使用线程分配的连接执行他们,返回结果。线程可以继续发出命令控制自己的事务,只是实际连接存在于其他线程中并有其他的线程管理。 共享缓存模式的连接使用不同的并发模型和隔离级别。注意同族连接的更改内容。 读未提交隔离级别: 编译指示read_uncommited,连接就是读未提交隔离级别。 解锁通知: 新版本的SQLite的包含的函数:sqlite3_unlock_notify(); 声明: int sqlite3_unlock_notify( sqlite3 * pBlocked,/*等待的连接*/ void (* xNotify ) (void **apArg,int nArg) /*要触发的回调函数*/ void *pNotifyArg /*传递给xNotify 的参数*/ ); 如果因为代码竞争没有获得共享锁,那么将要返回SQLITE_LOCKED;此时调用函数sqlite3_unlock_notify(),在阻塞连接上(第一个参数)上注册回调函数XNotify; 回调函数可以有任何参数。 拥有阻塞锁的连接将会触发xNotify回调,作为完成事务的sqlite3_step( )或者sqlite3_close()的一部分。多线程调用sqlite3_unlock_notify()时,事务可能已经完成了。此时,回调函数将会从sqlite3_unlock_notify()内初始化。每个阻塞连接上只会有一个注册解锁/通知回调函数;不可重入,回调函数中应咩有其他函数调用;使用Drop的时候,可能会出差错。 线程与内存管理: 与内存管理相关联的函数(指定堆的大小、限定堆栈): void sqlite3_soft_heap_limit(int N) ; 将软堆设置为N字节。如果使用的内存超过了N,将会调用下一个函数sqlite3_release_memory(int N),返回实际释放的字节数。 int sqlite3_release_memory(int N); 默认这些函数是空操作,除非编译SQLite时,启动预处理命令指令:SQLITE_ENABLE_MEMORY_MANAGENENT. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |