最近我开始在我的 Android 应用程序中使用房间数据库。尝试从多个线程访问数据库时遇到一些问题。我在所有线程中使用相同的数据库实例。
- 据我所知,如果所有线程都有相同的数据库实例,那么
数据库访问是序列化的。我读过一个blog https://medium.com/@gwendal.roue/four-different-ways-to-handle-sqlite-concurrency-db3bcc74d00e连载中的那个
模式只有一个线程可以读写数据库。然而
根据sqlite https://www.sqlite.org/lockingv3.html文档,读取启用共享锁,因此多个
线程可以同时读取。所以当使用数据库的单个实例时,
sqlite 的默认锁定标准允许多次读取和
是否执行了一次写操作?
- 根据 sqlite 文档,在写入数据库时,会启用第一个保留锁,并且如果任何其他写入操作尝试获取
保留锁然后写入尝试失败并且数据库返回 SQLITE_BUSY。
但是如果我尝试运行两个写操作
不同的线程我永远不会收到此错误。是不是意味着
写操作是排队的,并且保证我们永远不会
得到 SQLITE_BUSY 错误,因此写操作永远不会失败?
- 我正在一个线程(Thread1)中执行长插入操作(@Insert),并在另一个线程(Thread2)中读取数据库。如果
我在 Thread1 之后启动 Thread2,读取操作不会返回新的
在Thread1中插入数据,因此读取发生在插入之前。
发生这种情况是因为最初写入启用了保留锁并且
在此期间可以获取新的共享锁@sqlite
文档 https://www.sqlite.org/search?q=locking..
抱歉问了一个很长的问题。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)