2
class MyClass
let myString = "string"
func myFunc() -> String {
return self.myString
}
}
鑑於myString
永遠不會改變,是myFunc
線程安全嗎?只讀時變量是否線程安全?
class MyClass
let myString = "string"
func myFunc() -> String {
return self.myString
}
}
鑑於myString
永遠不會改變,是myFunc
線程安全嗎?只讀時變量是否線程安全?
通常,僅使參考成爲線程安全的只讀是不夠的。你需要確保被引用的對象不能被突變。
您的功能是線程安全的。但是,使myString
只讀只是原因的一部分:另一部分是myString
是不可變類型的事實。
例如,這MyClass
不是線程安全的,儘管myData
被只讀:
class MyClass
let myData = Mutable()
func myFunc() -> Mutable {
return self.myData
}
}
class Mutable {
var array : [String]
func add(s:String) {
array.apppend(s)
}
}
如果什麼'Mutable'沒有的功能和'array'是保證永遠不會改變? 'myFunc'是線程安全的嗎? – Code
@ tumber033如果'myData'沒有函數並且數據永遠不會改變,那麼它實際上是不可改變的,使'myFunc'再次成爲線程安全的。而且,如果你在myData上的所有可變函數都是非公開的,那麼'MyClass'在你的模塊之外是線程安全的,而在你的模塊中可能沒有線程安全的地方,你可以訪問變異函數。 – dasblinkenlight