BOOL read/write atomic in Objective C?
Was passiert, wenn zwei threads setzen ein BOOL YES "gleichzeitig"?
- Es öffnet sich ein Wurmloch in eine andere dimension.
- Wenn Sie sowohl die Festlegung auf
YES
gibt, kann es kein problem sein, ob das schreiben atomar ist oder nicht, kann es? - das könnte wahr sein, aber sein mir nicht klar, warum
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Ohne Verriegelung konstruieren, Lesen/schreiben Typ-variable NICHT atomar in Objective C.
Wenn zwei threads schreiben JA gleichzeitig ein BOOLESCHER Wert, das Ergebnis ist JA egal, die bekommt man im ersten.
Finden Sie unter: Synchronisierung Von Thread-Ausführung
Hier ist der code für die Lösung von Jacko.
Verwenden
volatile
uint32_t
mitOSAtomicOr32Barrier
undOSAtomicAnd32Barrier
OSAtomicOr32Barrier(allowed, & _IsRunning);
statt der bedingten Anweisung?Ich würde abweichen von der akzeptierten Antwort. Sorry.
Während objective-c garantiert nicht, dass BOOL deklarierten Eigenschaften als nonatomic
in der Tat atomic, ich würde zu erraten, dass die hardware, die du am meisten
sich über (alle iOS-und macos-Geräte) haben Anweisungen zum byte liest und speichert atomar. So, es sei denn, Apple kommt mit Road Light OS laufen
auf einem IBM-mikrocontroller, der 5 bit breiten bus zu senden, 10-bit-bytes über
Sie könnte genauso gut verwenden, nonatomic BOOLs in einer situation, die Anrufe für atomic BOOLs. Würde der code nicht portabel Road Light OS, aber wenn du kannst
Opfer der futureproofing des Codes nonatomic ist gut für diesen Anwendungsfall.
Ich bin sicher, es sind gehärtet Personen auf en.o. das wäre zu erhöhen, um die Herausforderung der Demontage synthetisiert BOOL get-und Set-atomic/nonatomic Fällen, um zu sehen, was der Unterschied ist. Zumindest auf dem ARM.
Ihr mitnehmen aus diesem ist wahrscheinlich, dass dies
auf alle HW-iOS und macOS intrinsisch unterstützt.
es sei denn, Sie sind in [sehr] fuzzy-Logik.
Es ist schwachsinnig und verschwenderisch, Sie wollen nicht ein Klon von einem Java-Programmierer,
wer kann nicht sagen, ein Schwimmer aus einem Doppel-oder tun Sie?
würde nicht atomar auf einigen engen bus-Architekturen objective C würde
nicht verwendet werden, auf eh (- mikrocontroller mit oder ohne einige [sehr] micro OS sind C & Montage-Gebiet, nehme ich an. Sie don ' T müssen in der Regel das Gepäck
objc runtime bringen würde)