utilizando dispatch_sync como bloqueo mutex

Esto es lo que necesito hacer. Espero que dispatch_sync sea la mejor manera de hacerlo usando GCD

Tengo una determinada pieza de código de sección crítica que se coloca en la devolución de llamada applicationDidBecomeActive en Appdelegate ..

Estoy terminando ese método dentro de una llamada dispatch_sync para que se llame solo una vez, no importa cuántas veces se llame applicationDidBecomeActive

- (void)applicationDidBecomeActive:(UIApplication *)application{    
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    
    NSLog(@"Thread created");
    //crtical code
    [self runCriticalSection];        
});}

¿Es esta la forma correcta de hacerlo usando dispatch_sync?

Respuestas a la pregunta(2)

Su respuesta a la pregunta