在领域中,如果事务A和B都以以下方式运行:
把第一项作为“第一”=>做一些长时间运行的操作=>删除“第一”
威尔:
我希望A阻止整个B,因为它“写”,然后B运行,并为"First“获得一个不同的值,但是看起来锁的粒度比它细,B在到达delete语句之前不会被阻塞。
这是否意味着他们只会带着各自独立的DB副本运行,获得"First“的相同值,然后沿着对方运行,然后B会抛出,因为在A已经删除之后,B会尝试删除"First”?
发布于 2016-11-11 22:56:49
交易互相阻塞。两个领域实例不能同时处于“写”模式。如果事务正在进行中,则另一个线程的领域实例将被阻塞,并被迫等待直到另一个事务完成。这就是为什么不鼓励UI线程领域事务。
在写模式期间,领域随时都会看到“实时最新数据”,这意味着即使您修改了数据库,底层的RealmResults也是实时更新的。(这是Java绑定中的一种“黑客”。)
事务A块事务B如果它先运行的话?
这就赢了。
https://stackoverflow.com/questions/40555991
复制相似问题