GCD を使用して、画像エディター ビューで「バックグラウンドで」いくつかの画像処理操作を実行しています。問題は、エディター ビューを開き、何らかの処理を行った後、エディター ビューに 10 ~ 20 分間座っていると、これらのOSSpinLockLock
フリーズが発生しますが、使用SpinLocks
またはロックは一切行われておらず、次のプロパティがあります。
@property (nonatomic, readonly) dispatch_semaphore_t processingSemaphore;
@property (nonatomic, readonly) dispatch_queue_t serialQueue;
次のようにキューを設定します。
processingSemaphore = dispatch_semaphore_create(1);
serialQueue = dispatch_queue_create("com.myapp.imageProcessingQueue", NULL);
dispatch_set_target_queue(serialQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, NULL));
次のように処理します。
dispatch_async(self.serialQueue, ^{
dispatch_semaphore_wait(self.processingSemaphore, DISPATCH_TIME_FOREVER);
....<do stuff>....
dispatch_semaphore_signal(self.processingSemaphore);
dispatch_sync(dispatch_get_main_queue(), ^{
....<notify that we're done>....
}];
});
どういうわけかセマフォかどうか疑問に思っています。