私はたくさんのLOTから読み込んだnsdictionaryをいくつかの点で同時にLOTに書いています。スレッドセーフなnsdictionary
反復処理時にスレッドセーフなものにするために、コピーしてコピーを繰り返し、オリジナルに追加します。
場合によっては、別のスレッドが追加中にそのスレッドをコピーしていることがあります。それをスレッドセーフにする良い方法はありますか?
私はたくさんのLOTから読み込んだnsdictionaryをいくつかの点で同時にLOTに書いています。スレッドセーフなnsdictionary
反復処理時にスレッドセーフなものにするために、コピーしてコピーを繰り返し、オリジナルに追加します。
場合によっては、別のスレッドが追加中にそのスレッドをコピーしていることがあります。それをスレッドセーフにする良い方法はありますか?
変更を加えてNSMutableDictionary
にし、スレッドセーフな方法で操作を行う必要がある場合、最も簡単な方法は、そのオブジェクトのすべてのアクセスを@synchronized
ステートメントでラップすることです。スレッドセーフ、例外セーフな方法でオブジェクトへのアクセスをロック:
@synchronized (myDictionary) {
[myDictionary setObject: ... forKey: ...];
[myDictionary removeObjectForKey: ...];
}
あり@synchronized
に、より高性能な選択肢があるが、それだけであなたのコードをプロファイリングした場合懸念されるとの同期が表示されるはずです問題。多くのアプローチの
1:
は、適切なロックと辞書(具体的には、私はコンテナとして機能し、C++のテンプレートを使用)を含むクラスを作成します。必要に応じてインタフェースをラップします。私はこれを多くのCF/NSタイプに対して行ってきました。それは合理的であるほど速いです。
NSMutableDictionaryについては、読み取り専用以外はスレッドセーフではありません(つまり、不変のNSDictionaryとまったく同じものを扱います)。初期化時にのみ書き込みます)。 –
ああ、おかしい、あなたは正しい。私は、 '__Mutable ____'というサブクラスがスレッドセーフであると考えていました。私の答えを編集する。 –
+1とコメントを削除してください、彼らは今編集履歴を見ていない意味がありません。 –