根据http://www.sqlite.org/threadsafe.html,使用 sqlite 时有三种不同的线程模式:单线程、多线程和序列化。当配置为序列化和多线程模式时,会使用互斥锁(取决于它们使用的模式或多或少),而在单线程模式下则根本不使用互斥锁。
假设数据库将仅用于查询(只读访问),是否可以使用单线程模式同时仍从不同线程访问它?还是有需要保护的全球资源?
另外,ADO.NET 的默认适配器System.Data.Sqlite是否可以同样使用?
根据http://www.sqlite.org/threadsafe.html,使用 sqlite 时有三种不同的线程模式:单线程、多线程和序列化。当配置为序列化和多线程模式时,会使用互斥锁(取决于它们使用的模式或多或少),而在单线程模式下则根本不使用互斥锁。
假设数据库将仅用于查询(只读访问),是否可以使用单线程模式同时仍从不同线程访问它?还是有需要保护的全球资源?
另外,ADO.NET 的默认适配器System.Data.Sqlite是否可以同样使用?
SQLite 库有许多内部数据结构,即使是只读数据库文件(缓存、编译语句、结果集等)也会发生变化,因此您绝不能从多个线程访问单线程连接。
ADO.NET 不做任何线程安全保证,System.Data.SQLite 也不做。