[Objective-C]同期処理⇄非同期処理

同期処理を非同期にする。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       //処理
   });

非同期処理を同期処理にする。

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       //処理
       dispatch_semaphore_signal(semaphore);
   });
   dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

セマフォカウンタを0で初期化、waitをするとカウンタがマイナスされて-1になり、-1になるとそのスレッドの処理が停止する。

signalをするとカウンタをプラスして0になり、処理が続行される。





いいなと思ったら応援しよう!