0

我有一个要求,如果找到一个新对象,我将其唯一 id 添加到继承该类的所有父类中。例如,如果 C:B 和 B:A(C 扩展 B 和 B 扩展 A),那么如果为 C 找到一个新对象,由于继承,该对象也是 B 和 A 类型,因此该对象进入包含其所有子实例的 A 和 B(子)列。因此,我想将它作为一个数组。为此,我正在读取 A 和 B 行并获取子列,将其反序列化为数组并将其放回 db。现在这肯定有锁定问题。例如,如果同时发现 D:C 或 D:B 的实例,则它们都将读取相同的副本,最后一次写入将赢得擦除先前写入的实例。

有没有办法通过在我的事务(在本例中为读取-->更新数组-->写入)完成之前不允许其他人读取它来消除此问题。

有没有推荐的方法来解决这个问题。

4

1 回答 1

0

如果我正确理解您的要求,那么我认为您需要使用独占锁嵌套您的事务,例如:

sqlite3_exec(db, "BEGIN EXCLUSIVE", 0, 0);
...
sqlite3_exec(db, "END", 0, 0);
于 2017-06-15T23:21:31.363 回答