NSPrivateQueueConcurrencyType
NSManagedObjectContext
を使用しています。次のような状況でデッドロックが発生します。2つのスレッドでNSPrivateQueueConcurrencyType管理対象オブジェクトコンテキストを使用した場合のデッドロック
バックグラウンドスレッドでは、performBlock:の呼び出しが行われます。そのブロックにはexecuteFetchRequest:error:
コールが含まれています。
ブロックが実行されている間、メインスレッドはperformBlockAndWait:
を呼び出します。メインスレッドは、バックグラウンドスレッドのブロックが終了するのを待ちます。それは正常です。
バックグラウンドのスレッドブロックでexecuteFetchRequest:error:
コールが行われると、デッドロックが発生します。
私はexecuteFetchRequest:error:
がperformBlockAndWait:
のメインスレッドが終了するのを待っていると思います。
これはバグですか?または私は何かを理解していないのですか?私にとっては、このコードはすべてNSPrivateQueueConcurrencyType
MOCで有効と思われます。
これはあまり起こりませんが、それが起こると、まあ...アプリは死んでいます。 – gcamp