2016-03-23 10 views
0

Ok, lassen Sie uns die folgende Klasse vorstellenWas ist die beste Methode und akzeptierte Methode zur Lösung dieses Threading- und Datenintegritätsproblems?

Code Here

Nun, das tun wir ein Problem haben würde. Unsere Probleme sind in den Zeilen 58 & 65. Nehmen wir Zeile 58.

Wir wickeln Mutation unserer NSMutableArray in einem Dispatch_async Anruf in eine serielle Warteschlange. Wenn wir jedoch [self myMutableArray] aufrufen, wird dispatch_sync an dieselbe serielle Warteschlange gesendet. Dieser Abfertigungscode wird niemals aufgerufen, da unser erster Abfertigungscode nicht zuerst abgeschlossen wird.

Was ist die ideale Lösung für dieses

1) entfernen - (NSMutableArray *)myMutableArray und - (void)setMyMutableArray:(NSMutableArray *)myMutableArray. Halten Sie alle Lesevorgänge in dispatch_sync in der seriellen Warteschlange und alle Schreibvorgänge in dispatch_async-Aufrufen in die serielle Warteschlange ... mit Ausnahme von Setter und Getter. Ist es üblich, den Setter und Getter niemals zu umbrechen?

Das ist eigentlich die einzige Lösung, glaube ich.

Also meine Frage ist ... ist es gängige Praxis, die Getter und Setter Interna in Versand in die serielle Warteschlange zu wickeln?

Antwort

0

Ihr Code hat created a deadlock, da der Aufruf von sync in einer asynchronen seriellen Warteschlange in der gleichen Warteschlange einen Deadlock verursacht, weil der äußere Block auf den inneren Block wartet, aber der innere Block nicht ausgeführt werden kann Rückseite der Warteschlange.

seine wahrscheinlich am besten den Getter in einer Warteschlange eingewickelt nicht haben, vielleicht können Sie die Setter obwohl

verlassen
Verwandte Themen