我有一個OSX應用程序,我正在使用父/子NSManagedObjectContext設置。孩子MOC有NSPrivateQueueConcurrencyType
,是我主要使用的。父級設置爲NSMainQueueConcurrencyType
NSManagedObjectContext performBlockAndWait當從兩個線程調用時導致死鎖
當我從後臺線程調用performBlockAndWait
在從主線程調用它的同時,我得到死鎖 - semaphore_wait_trap
。暫停調試器顯示兩個線程都卡在performBlockAndWait
我該如何解決這個問題?我認爲這種方法是專門針對這種情況設計的,只需將上下文的私有隊列中的塊排隊,然後適當地返回?
嗯我可以嘗試和切換我的代碼執行塊是的,肯定會更長的回調等,但完全有可能我敢肯定。那麼通過使用這種方法,塊將以線程安全的方式執行? – 2013-05-04 23:17:44
performBlock和performBlockAndWait只是確保您傳遞給它們的塊在與託管對象上下文相關的正確隊列上執行。所以是的,你的塊將在上下文中以線程安全的方式執行 - 不同之處在於你的代碼的語義,如果你需要阻塞並等待塊完成。我會一直努力首先使用performBlock並使用performBlockAndWait,如果不得不出於任何原因。請參閱http://developer.apple.com/library/mac/#releasenotes/DataManagement/RN-CoreData/index.html – bandejapaisa 2013-05-05 06:41:00