Apple сказала: «Если вы используете тип значения, вы можете безопасно передавать копии значений между потоками без синхронизации». Но в последнее время я видел сбой параллелизма, противоречащий руководству Apple.
Я видел https://developer.apple.com/swift/blog/?id=10 и руководство Apple, в котором говорилось, что «тип значения безопасен в многопоточности», поэтому я подумал: «Тип значения является атомарным!» но недавно я увидел сбой параллелизма в приведенном ниже коде.
class ClassB: NSObject {
func readSomeValue() {
print(classA.someValue)
}
let classA = ClassA()
}
class ClassA: NSObject {
private(set) var someValue: StructA? {
didSet{
if oldValue != self.someValue { self.someFunction(self.someValue) }
}
}
private func modifySomeValue(_ newValue: StructA) {
self.someValue = newValue
}
}
struct StructA {
var a: Double
var b: String?
}
происходит сбой параллелизма при выполнении readSomeValue () в потоке 1 и выполнении modifySomeValue () в потоке 2.
Почему происходит сбой параллелизма? Тип значения не безопасен в многопоточности?