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
を読み取り専用にすることは、理由の一部にすぎません。もう1つは、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