2016-04-28 5 views
2

私は両方とも、このクラスの同じオブジェクトへの参照を有する2つのスレッドを持っているクラスSwiftで異なるメンバーのスレッドセーフにアクセスしていますか?

class Foo { 
    var bar : Int 
    var baz : Int 
} 

を有します。しかし、彼らはこのクラスの異なるメンバーにアクセスしています。

  • スレッド1はバーに読み書きしています。
  • スレッド2はbazに読み書きしています。

このスレッドは安全ですか?

これらの2つのメンバーが異なるオブジェクトなので、私の前提です。しかし、私は(私のまだ限られたSwift知識を考慮に入れて)二重チェックしたい。

答えて

1

はい、1つのスレッドが1つのプロパティと相互作用していて、もう1つのプロパティが他のプロパティと相互作用していて、本当に両方のプロパティと相互作用するものがない場合、おそらく問題ありません。

確かに、これらの2つのプロパティが本当に同じクラスのプロパティである必要がありますか?確かに、低いcohesionソリューションのように感じます。また、このオブジェクトとやりとりする他のオブジェクトがスレッドの整合性のこの分割を尊重しているかどうかに依存して、少し脆いようですが、技術的にはうまくいく可能性があります。

これをどのように使用するかの実例を私たちに伝えることができれば、より具体的な相談をすることができます。

+1

はい。それは壊れやすいと感じます(他のメンバーとやりとりするコードを変更するのは簡単すぎます)。 –

+0

これはパフォーマンスの問題でもあります。私は素早くデータレイアウトを知っていませんが、それらの2つのバールが同じキャッシュラインで終わると、あなたの2つのスレッドは所有権を競合します(間違った共有とも呼ばれます) – Bahbar

関連する問題