Was ist der Unterschied zwischen "atomaren" und nicht-atomaren? [Duplikat]

8

Ich möchte nur wissen, was der Unterschied zwischen diesen zwei Codezeilen ist:

%Vor%

und

%Vor%

Danke, Grüße, tek3

    
tek3 26.07.2010, 04:31
quelle

2 Antworten

8

Atomare Eigenschaften sind in einer Multi-Thread-Referenzumgebung erforderlich, um zu verhindern, dass Objekte verschwinden, bevor ein Thread sie behalten kann.

Betrachten Sie die naive Implementierung eines Get Accessors:

%Vor%

Das ist alles in Ordnung, außer dass, wenn Sie die Instanz von MyObject freigeben, bevor Sie den zurückgegebenen Wert von -myProperty beibehalten, der zurückgegebene Wert möglicherweise freigegeben wird. Aus diesem Grund ist es sicherer, -myproperty wie folgt zu implementieren:

%Vor%

Dies ist jetzt völlig sicher in einer Single-Thread-Umgebung.

Leider gibt es in einer Multithread-Umgebung eine Race-Bedingung. Wenn der Thread zu einem beliebigen Zeitpunkt unterbrochen wird, bevor der Retain den Retain-Zähler inkrementiert hat, werden Sie entweder einen der folgenden Punkte erhalten:

  • Die Instanz von MyObject wird freigegeben und von einem anderen Thread freigegeben, wodurch die Freigabe und Freigabe der ivar ausgelöst wird
  • myProperty wird von einem anderen Thread neu zugewiesen, wodurch die alte Version freigegeben und freigegeben wird

Aus diesem Grund müssen alle Zugriffe auf die Eigenschaft durch eine Sperre geschützt sein. Der get-Accessor sieht in etwa so aus.

%Vor%

Der Set-Accessor ist in ähnlicher Weise geschützt, ebenso die Freigabe in -dealloc

    
JeremyP 26.07.2010, 08:34
quelle
2

Die Apple Docs erklären das alles sehr gut. Weitere Informationen zu Eigenschaften, einschließlich ihrer Atomizität, finden Sie auf dieser Seite .

    
mk12 26.07.2010 04:56
quelle

Tags und Links