セマフォが 0 より大きい値で作成されたときに、dispatch_semaphore_wait(..) を使用すると問題が発生します
sema = dispatch_semaphore_create(2);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//signals here
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
待機は 2 つのシグナルを待機する必要がありますか? 上記のコードでは、まったく待機しないため、リリースが呼び出され、結果としてクラッシュします!