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