根据beginWriteTransaction方法中的文档
一次只能打开一个写入事务。写交易 不能嵌套,并试图开始写一个事务 已经在写入事务中的RLMRealm将抛出一个 例外。从RLMRealm实例调用beginWriteTransaction 其他线程将阻塞,直到当前写入事务 完成。
但是当我看到代码时,我发现了下一个:
void Realm::begin_transaction()
{
check_read_write(this);
verify_thread();
if (is_in_transaction()) {
throw InvalidTransactionException("The Realm is already in a write transaction");
}
// make sure we have a read transaction
read_group();
transaction::begin(*m_shared_group, m_binding_context.get());
}
你能解释什么时候满足条件吗?
从其他的RLMRealm实例调用beginWriteTransaction 线程将阻塞,直到当前写入事务完成。
答案 0 :(得分:0)
最后一次调用将导致一个方法,该方法将保留这个中间跨平台C ++ API级别,并深入到我们的内部存储引擎中,它使用互斥锁来协调进程和线程之间的独占访问。
获取此互斥锁后,它将一直保持,直到写入事务被提交或取消。