标签:
sqlite使用文件锁来在保证多线程访问。如果文件锁机制不正常,会导致同时读写文件等信息,导致数据库损坏
open()
,read()
以及close()
。此时,这个文件的所有锁已经没了。因此A、B有可能会同时写数据到文件中。POSIX advisory locking
,可以用sqlite3_open_v2()
函数修改。如果不一致,可能发生同时读写,数据库损坏。为了保证数据库文件的一致性(consistent),会调用fsync()
系统调用,把内存中的数据刷到磁盘中。如果这个sync操作失败,会导致数据库文件损坏
synchronous=OFF
可以提高速度,却会导致文件不一致。当野指针、内存溢出等原因,可能导致内存中的数据库结构损坏,从而有可能导致数据库文件损坏。
当进行memory-mapped I/O时,由于内存直接映射到磁盘,如果发生数组越界等,内存中的数据损坏,磁盘文件也会损坏
标签:
原文地址:http://www.cnblogs.com/huahuahu/p/shu-ju-ku-sun-huai-de-ke-neng-yuan-yin.html