ho una coda di invio di serie creata con:dispatch_async vs ordine di esecuzione dispatch_sync
dispatch_queue_t serialQueue = dispatch_queue_create("com.unique.name.queue", DISPATCH_QUEUE_SERIAL);
voglio usare questa coda di serie per garantire la sicurezza dei thread per l'accesso di classe, mentre si fa automaticamente il lavoro in modo asincrono che non ha bisogno di ritorna al thread chiamante.
- (void)addObjectToQueue:(id)object
{
dispatch_async(serialQueue, ^{
// process object and add to queue
});
}
- (BOOL)isObjectInQueue:(id)object
{
__block BOOL returnValue = NO;
dispatch_sync(serialQueue, ^{
// work out return value
});
return returnValue;
}
Se chiamo l'addObjectToQueue: metodo, poi subito chiamare l'isObjectInQueue: metodo, essi sono garantiti per essere eseguito nello stesso ordine, o lo/la potevano isObjectInQueue eseguire per primo?
In altre parole, dispatch_async esegue esattamente lo stesso di dispatch_sync (pianificando immediatamente il blocco) eccetto che non blocca il thread chiamante?
Ho visto domande simili con risposte andando in entrambe le direzioni, quindi sto cercando una risposta definitiva, preferibilmente supportata dalla documentazione Apple.
"Se chiamo il metodo addObjectToQueue :, quindi, richiamo immediatamente il metodo isObjectInQueue:, sono garantiti per l'esecuzione nello stesso ordine o will/potrebbe eseguire isObjectInQueue per primo?" chiedendo questo probabilmente vuoi dire "Potremmo chiedere l'oggetto prima che fosse aggiunto alla coda?". Perché, ovviamente, 2 metodi vengono eseguiti in modo che vengano chiamati se chiamati sullo stesso thread. – krafter