线程:
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.