内部に関数を通過する複数のスレッドがある場合、内部に変数の代入を持つforループがあります。変数の値が複数のスレッド間でどのように混乱することはありませんか?メモリはスレッド内でどのように管理されますか?
1
A
答えて
0
各スレッドには、「スレッドスタック」という名前のメモリブロックがあり、パラメータまたは中間結果である値の型と参照(ヒープへのポインタ)が格納されます。32ビットで約1MB、64ビットで4MBです。このスペースはスレッド間で共有されません。残りのもの(つまり、共有された値の型と参照、および参照が参照される可能性のあるオブジェクト)はヒープに格納されます。これは残りのRAMメモリであり、すべてのスレッドで共有されます。
競合状態など、スレッド間で値が混乱する可能性があります。複数のスレッドから64ビットの値を32ビットのCPUで更新しようとすると、たとえば、Interlock
およびMonitor
ユーティリティのように、.NETで多くの同期プリミティブが発生するのを防ぐために、矛盾が発生する可能性があります。また、List<>
のようなスレッドセーフではないオブジェクトは、同期なしで複数のスレッドを使用すると混乱する可能性があります。単純な整数のインクリメントは、操作がアトミックでない場合は値を失う可能性があります。
読んでください。私はあなたに、Jeffrey RichterのC#経由でCLRをお勧めします。すべての.NET開発者は実際にその本を読むべきです。
関連する問題
- 1. メモリはPythonでどのように管理されますか
- 2. スレッド間でのメモリ管理
- 3. AngularjsはngViewでメモリ管理をどのように処理しますか?
- 4. スレッドはHttpApplicationによってどのように作成され、管理されますか?
- 5. c#整数は内部的にどのように管理されますか?
- 6. スレッドはスレッドプールによって管理されていますか?
- 7. 1つの仮想アドレス空間内のプロセススレッドのメモリ管理はどのように行われますか?
- 8. V8はオブジェクトインスタンスのメモリをどのように管理しますか?
- 9. Webアプリケーションのバージョン管理はどのように処理されますか?
- 10. Javaスレッドのメモリ管理の問題
- 11. Cで構造体のメモリをどのように管理しますか?
- 12. joblib並列関数はどのようにメモリを管理しますか?
- 13. Qt QML Javascriptはどのようにメモリを管理しますか?
- 14. 動的メモリをstd :: vectorでどのように管理しますか?
- 15. クラスのメモリはC++でどのように処理されますか?
- 16. Java - JNI Cコードのメモリはどのように管理されていますか?
- 17. CMTとBMTはEJBでどのように管理されますか?
- 18. npmパッケージはnodesterでどのように管理されますか?
- 19. メモリ管理アルゴリズムはどこで使用されていますか?
- 20. スレッドはCOMコンポーネント内でどのように作成されますか?
- 21. アクティビティのメモリ管理はローカルサービスにバインドされて変更されますか?
- 22. 管理されていない配列を管理対象スレッドに渡す。 - メモリの破損
- 23. スレッドがループ内でどのように実行されるか
- 24. OSによるメモリ管理
- 25. ARCでこのUIBarButtonItemのメモリを適切に管理するにはどうすればよいですか?
- 26. SQL Serverデータベースのデバッグバージョンはどのように管理されていますか?
- 27. Erlangでメモリ不足がどのように処理されていますか?
- 28. これらのメモリ管理技術は、どのような状況で優れていますか?
- 29. ポート番号はどのように管理されていますか?
- 30. Javaはどのようにメモリ内のStringオブジェクトを処理しますか?
*同じ*スレッドが同じ関数の2回の実行の途中にある場合(例えば、関数が再帰的な場合など)、メモリが混乱することはありません。なぜ2つのスレッドが関数を実行していたのですか? – user2357112
関数のコードだけでアクセスできる関数のローカル変数、またはプログラム全体の他のコードからアクセス可能なグローバル変数を参照していましたか?ローカル変数を意味するなら、すべてのスレッドはその中の_copy_を受け取ります。グローバル変数を意味する場合は、もちろん、特別な予防措置を講じない限り、複数のスレッドが値を混乱させる可能性があります。 –
単一のスレッドが同じ機能を2度同時に実行する場合と同じ方法です(再帰など)。 –