Wollen Sie versuchen, einfache Race-Bedingung zu machen und dispatch_barrier verwenden, um es zu lösen.Wenn es richtig ist, Race Condition in Swift zu tun?
Ein Zögern darüber, weil der Wert um 1000 in der Regel ein bisschen mehr ist, aber ich nehme an, dass sollte etwas größer sein, als ich auf Youtube-Videos gesehen habe.
class A {
var someValue = 0
func increaseValueBy1000() {
for _ in 0..<1000 {
let v = self.someValue + 1
print(v)
self.someValue = v
}
}
}
let instance1 = A()
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
instance1.increaseValueBy1000()
}
instance1.increaseValueBy1000()
Wenn es richtige Race Condition Beispiel ist oder nicht?
Ich würde 'print (v)' aus der Schleife entfernen. Wer weiß, was passiert, wenn der Druck synchronisiert wird? – werediver
Aber woher weiß ich, ob ich einen falschen Wert von v erhalten habe oder nicht? –
@ wm.p1us NSLog stattdessen drucken – user3441734