Welchen Vorteil(E) hat dispatch_sync haben über @synchronisiert?

Können sagen, ich möchte diese code thread-safe:

- (void) addThing:(id)thing { //Can be called from different threads
    [_myArray addObject:thing];
}

GCD scheint der bevorzugte Weg, dies zu erreichen:

- (void) addThing:(id)thing { 
    dispatch_sync(_myQueue, ^{  //_myQueue is serial.
        [_myArray addObject:thing];
    });    
}

Welchen Vorteil(E) hat es über die traditionelle Methode?

- (void) addThing:(id)thing {
    @synchronized(_myArray) {
        [_myArray addObject:thing];
    }
}
  • "GCD Nähte wie die bevorzugte Art und Weise" ... haben Sie eine Referenz für diese Aussage?
  • Ich habe das Gefühl, von der GCD WWDCs, dass dies die moderne Art und Weise. Ich könnte falsch sein, tho.
  • die meisten der Innovationen sind BESSER...nicht immer!!!
  • Ok, ich glaube, ich fand einen Verweis. @synchronisierte verwendet sperren unter der Haube, richtig? "Warteschlangen nicht zu verhängen, die gleichen Strafen wie sperren. Zum Beispiel, queueing ' - eine Aufgabe, die nicht erfordert überfüllung in den kernel zu erwerben, eine mutex." developer.apple.com/library/ios/documentation/General/...
  • Nicht haben Sie ganz andere Strategien? Sie können nicht dispatch_sync in einem rekursiven Aufruf auf dem gleichen Warteschlange, Sie wird deadlock,
InformationsquelleAutor Robert | 2013-07-11
Schreibe einen Kommentar