アプリのログを保存するために sqlite ファイルを使用しています。複数のスレッドを同期するために、シングルトン オブジェクトを使用し、このオブジェクトを @synchronized したため、一度に 1 つのスレッドだけがログを保存できます。NSManagedObjectContext のオブジェクトは、ログ オブジェクト シングルトンのメンバーです。
ログを保存しているスレッドが多数ある場合、[NSManagedObjectContext save:] を呼び出すと 1 つのスレッドがフリーズするという問題が発生しました。他のスレッドは @synchronized ゾーンに入ることができないため、これらすべてのスレッドがフリーズします。save: メソッドを呼び出す頻度を下げようとしました (たとえば、10 個のスレッドがログの保存を終了したときに save: を 1 回呼び出す) と、問題の発生は少なくなりました。エントリを複数回ログに記録しようとしましたが、途中でフリーズが発生したため、データのフォーマットは正しいと確信しています。
以前にこの問題に遭遇したことがありますか。もしそうなら、問題を解決する方法は?私のやり方を使えば周波数を下げることができるようですが、それはただの散歩です。[NSManagedObjectContext save:] を呼び出すとアプリがフリーズする理由を知りたいです。
ありがとう。