class MyClass
let myString = "string"
func myFunc() -> String {
return self.myString
}
}
Учитывая, что myString
не изменяется, является myFunc
10 потокобезопасным?Являются ли переменные потоками безопасными при чтении?
class MyClass
let myString = "string"
func myFunc() -> String {
return self.myString
}
}
Учитывая, что myString
не изменяется, является myFunc
10 потокобезопасным?Являются ли переменные потоками безопасными при чтении?
Как правило, недостаточно сделать ссылку только для чтения, чтобы сделать класс потокобезопасным. Вы должны убедиться, что объект, на который ссылается, не может быть изменен.
Ваша функция защищена потоком. Однако сделать 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