Multithreading 从多线程开始的beginWriteTransaction

Multithreading 从多线程开始的beginWriteTransaction,multithreading,realm,Multithreading,Realm,根据beginWriteTransaction方法中的文档 一次只能打开一个写事务。写事务 无法嵌套,正在尝试在上开始写入事务 已在写入事务中的RLMRealm将抛出 例外。从中的RLMRealm实例调用beginWriteTransaction 其他线程将阻塞,直到当前写入事务结束 完成 但当我查看代码时,我发现了下一个: void Realm::begin_transaction() { check_read_write(this); verify_thread(); i

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


最后一个调用将导致一种方法,它将离开中间跨平台C++ ++ API级别,并深入到我们的内部存储引擎,在这里它使用互斥体来协调进程和线程之间的独占访问。


一旦获得了互斥体,它就被保存到提交事务或被取消。

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

您有什么解决方案吗?当我尝试从两个线程写入默认域时,如何解决此问题?现在我只有一个解决方案:1)
dispatch\u queue\t serialQueue=dispatch\u queue\u create(“com.unique.name.queue”,dispatch\u queue\u SERIAL)
2)并将所有事务打包到块中。当我尝试从两个线程写入默认域时,您有什么解决方案吗?现在我只有一个解决方案:1)
dispatch\u queue\t serialQueue=dispatch\u queue\u create(“com.unique.name.queue”,dispatch\u queue\u SERIAL)
2)并将所有事务包装在块中。