多线程

时间:2016-04-26 09:44:38

标签: multithreading realm

根据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   线程将阻塞,直到当前写入事务完成。

1 个答案:

答案 0 :(得分:0)

最后一次调用将导致一个方法,该方法将保留这个中间跨平台C ++ API级别,并深入到我们的内部存储引擎中,它使用互斥锁来协调进程和线程之间的独占访问。
获取此互斥锁后,它将一直保持,直到写入事务被提交或取消。