スレッドが10個あり、サブアレイが10個ある場合は、各スレッドがサブアレイの異なる1つで動作するのは安全ですか?スレッド[0]は配列[0]への処理を行い、スレッド[1]は配列[1]への処理を行います。これは安全ではありませんか?ベクトルまたは配列(またはそのデータセット)であれば違いがありますか?異なるスレッドで異なるサブアレイにアクセスすることは安全ですか?
答えて
10個の小さな配列を含む「マザー配列」を作成し、各スレッドがこれらの配列のうちの1つに排他的にアクセスしている場合、何も悪いことは起こりません。これらの配列の要素のサイズは関係ありません。
配列の代わりにもっと複雑な構造を使用すると、読み込みが何も変更されない場合も安全です。しかし、構造からの単純な読み込み(例えば、何かがキャッシュされ、再編成される)を変更できる場合、並列構造のスレッドが母構造にアクセスすることは問題になります。
それ以外は、トラブルが発生する可能性がある場合は表示されません。
はい、安全です。スレッドのどれもがガードや同期なしで他のスレッドへのアクセスを変更しない限り、あなたは安全です。メモリアドレスが互いに非常に近いかどうかは関係ありません。近接は役割を果たさない。重要なことは、共有があるかどうかであり、そうであれば、いずれかのスレッドが共有リソースを変更します。
私はこのように見ています。無限の人が一度に一杯の水を見ることができますが、一人しかそれを飲むことはできません。 –
@セスカーネギー:私はちょうどここにどのように関連しているか分かりません –
プロキシミティは正確性のための役割を果たしませんが、近代的なメモリ階層のおかげで、パフォーマンスのために潜在的に大きな役割を果たすことができます。その効果は「偽の共有」として知られています。 Herb Sutterからの引用:_ "誤った共有を取り除くためにいくつかの行がゼロスケーリングから完璧なスケーリングにアルゴリズムを要する" _。 –
本質的にはい - それは配列レベルで安全です(ただし、これは以下にも依存します)。しかし、ツリーや二重リンクリストなどの別の構造であれば、構造を変更しようとすると問題に遭遇する可能性があります。これは、ある要素への変更が安全ではない他の要素への変更を必要とするためです。しかし、あなたがデータを読んでいる限り、あなたはOKであるはずです。 1つの落とし穴は、配列に参照またはポインタが含まれている場合です。この場合、別々の配列エントリにアクセスしている間に、メモリ内の同じ領域を直接的または間接的に参照することがあります。その場合、適切な同期を実行する必要があります。
したがって、1つの単語に:それがintまたは別の単純なデータ型の配列であれば、あなたは完全に安全です。配列ではないか、要素が完全にインプレースではなくポインタや参照を含む場合は、注意が必要です。
- 1. TObjectListスレッドの異なるインデックスに安全にアクセスできますか?
- 2. 異なるコントロール間でレイアウトインスタンスを共有することは安全ですか
- 3. Androidの2つの異なるアクティビティでログインデータに安全にアクセスする
- 4. 異なるネイティブコンテキストを異なるスレッドで実行することは可能ですか?
- 5. 異なるスレッドの異なるイメージに対してknnMatchを実行することは可能ですか?
- 6. 異なるスレッドから単一ressource(ここではTCPソケット)にアクセス
- 7. ココアで異なるスレッドを使用しているときに異なるコントローラのオブジェクトにアクセスする
- 8. 同時に2つの異なるgitクライアントが同じローカルgitリポジトリにアクセスするのは安全ですか?
- 9. は異なるスレッドから
- 10. 異なるスレッドが同じVecの異なるセクションに書き込むことはできますか?
- 11. 異なるWindowsフォームコントロールに対して同じイベントハンドラを使用することは安全ですか?
- 12. SSL - 安全なページから安全でないAPIにアクセスする
- 13. ここで==ここと==異なるのはなぜですか?
- 14. ContentProviderは異なるスレッドで異なるクエリを処理しますか?
- 15. 異なるスレッドが同じオブジェクトの異なる独立したメソッドに同時にアクセスできますか?
- 16. ファイル作成プロセスは、osレベル(ubuntu)の異なるプロセス間で安全ですか?
- 17. 異なる値を含むことができる要素から安全に値を取得する
- 18. QTの異なるスレッドで実行されているオブジェクトを安全に終了する方法
- 19. Rは異なるスレッド/タスクで異なる関数を実行するR
- 20. なぜjQuery.dataと.data()は異なる動作をし、異なるデータにアクセスするのですか?
- 21. ..異なるスレッドが
- 22. .NETスレッドはオペレーティングシステムスレッドと異なるのですか?
- 23. javaスレッドに異なるオブジェクトをアクセスする
- 24. スレッドセーフティ:異なるNSMutableDictionaryエントリにアクセスする2つのスレッド
- 25. 異なるGoogle Playアカウントで、同じキーで異なるアプリに署名することはできますか?
- 26. ブーストメッセージキューのスレッドは安全でプロセスは安全ですか?
- 27. 異なるバージョンのSharePointサーバーと最も安全にやり取りする方法はどれですか?
- 28. 異なるサイト間の安全な購入
- 29. 複数のスレッド間でストリームインスタンスを共有することは安全ですか?
- 30. フェンスでSPSCスレッドを安全にする
アレイ内のオブジェクトの大きさはどれくらいですか? – sarnold