「Objective-Cで非同期処理を同期処理にする方法。」に、ディスパッチセマフォによってスレッドがデッドロックしてしまう場合があるということを書きました。 デッドロックする例 これがその例です。 NSLog(@"start."); dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ for (int i = 0; i < 5; i++) { sleep(1); NSLog(@"Process: %d", i); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"Main Process"); }
![Objective-Cでスレッドをデッドロックさせずに非同期処理の終了を待つ方法。](https://cdn-ak-scissors.b.st-hatena.com/image/square/6747bb7158c1993dfcceee32cf21d8208b457022/height=288;version=1;width=512/https%3A%2F%2Fblog.katty.in%2Fwp-content%2Fthemes%2Fcocoon-master%2Fscreenshot.jpg)