0

Ich habe zwei Threads: Thread 1 legt ein Schlüssel-Wert-Paar in einem NSMutableDictionary fest und liest diesen Wert später und Thread 2 macht dasselbe mit einem anderen Schlüssel-Wert-Paar. Die Schlüssel sind unterschiedlich und jeder Thread liest nur das Schlüssel-Wert-Paar, das er gesetzt hat. Jedoch kann jeder Thread lesen, während der andere schreibt.Threadsicherheit: Zwei Threads, die auf verschiedene NSMutableDictionary-Einträge zugreifen

Also meine Frage ist, ob ich das NSMutableDictionary schützen muss, wenn zwei Threads auf unterschiedliche Einträge desselben NSMutableDictionary zur gleichen Zeit zugreifen? (Wird das gesamte NSMutableDictionary von einem Thread "beansprucht" oder sind die Operationen für einzelne Einträge unabhängig?)

+0

Siehe https : //stackoverflow.com/questions/1986736/nsmutabledictionary-thread-safety – rmaddy

Antwort

0

Sie können ein Container-Objekt nicht wie ein Wörterbuch ändern/mutieren, während Sie es aus einem anderen Thread lesen oder darauf schreiben.

Das Setzen von Schlüssel/Wert-Paaren in einem Wörterbuch mutiert das Wörterbuch. Jedes Schlüssel/Wert-Paar ist keine unabhängige Entität.

Sie müssen das Wörterbuch schützen oder Sie können abstürzen oder andere unerwünschte Verhaltensweisen haben. Eine einfache Möglichkeit, das zu tun, von Objective-C die @synchronized Richtlinie zu verwenden ist, und verwenden Sie das Wörterbuch selbst als Gegenstand der Richtlinie übergeben:

@synchronized(myDict) { 
    valueFromDict = myDict[@"someKey"]; 
} 

Und von einem anderen Thread:

@synchronized(myDict) { 
    myDict[@"someOtherKey"] = someValue; 
} 
Verwandte Themen