usando dispatch_sync como um bloqueio mutex

Aqui está o que preciso fazer. Espero que o dispatch_sync seja a melhor maneira de fazer isso usando o GCD

Eu tenho um certo pedaço de código de seção crítica que é colocado no retorno de chamada applicationDidBecomeActive no Appdelegate ..

Estou encerrando esse método dentro de uma chamada dispatch_sync para que ela seja chamada apenas uma vez, não importa quantas vezes applicationDidBecomeActive seja chamado

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

Este é o caminho certo para fazer isso usando o dispatch_sync?

questionAnswers(2)

yourAnswerToTheQuestion