2013-08-29 59 views
0

線程凍結我正在使用sqlite文件來保存我的應用程序的日誌。爲了同步多個線程,我使用了一個單例對象,並@synchronized這個對象只有一個線程可以一次保存日誌。 NSManagedObjectContext的對象是日誌對象單例的成員。當調用[NSManagedObjectContext保存:]

我遇到了一個問題,當有很多線程保存它們的日誌時,一個線程在調用[NSManagedObjectContext save:]時會凍結。沒有其他線程可以進入@synchronized區域,並導致所有這些線程凍結。我試圖降低調用save:方法的頻率(例如,當10個線程完成保存日誌時調用save:一次),並且問題發生得更少。我確信數據的格式是正確的,因爲我試圖記錄多次輸入,凍結髮生在中間。

您以前遇到過這個問題。如果是這樣,如何解決這個問題?看來,用我的方式可以降低頻率,但它只是散步。我希望知道調用[NSManagedObjectContext save:]時應用程序凍結的原因。

謝謝。

回答

0

只有一個線程應該更新託管對象上下文並保存(至少在任何時間)。在你的單例中創建一個NSOperationQueue,將它設置爲一次只運行一次操作,然後通過新的NSOperation(可能按塊)添加每個日誌。

+0

我用@synchronized只讓一個線程更新NSManagedObjectContext,所以實際上每次只有一個線程調用[NSManagedObjectContext save:]。問題是如果這個方法被頻繁調用,它會被隨機凍結。 – AthlonFX87

相關問題