問題タブ [memory-model]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1847 参照

language-agnostic - 並行性とメモリ モデル

GPGPU と新しい C++ AMP ライブラリに関する Herb Sutter によるこのビデオを見ています。彼はメモリ モデルについて話し、弱いメモリ モデル、次に強いメモリ モデルについて言及しています。また、読み取り/書き込みの順序などについて言及していると思いますが、よくわかりません。

Google はメモリ モデルに関するいくつかの興味深い結果 (主に科学論文) を出していますが、誰かが弱いメモリ モデルとは何か、強いメモリ モデルとは何か、およびそれらと同時実行性との関係を説明できますか?

0 投票する
1 に答える
3349 参照

java - Java メモリ モデルと C++11 メモリ モデルの類似点は何ですか?

新しい C++ 標準では、メモリ モデルの概念が導入されています。スタック オーバーフローについては、それが何を意味するのか、C++ でのコードの記述方法がどのように変わるのかなど、すでに質問がありました。

私は、C++ メモリ モデルが古いよく知られている Java メモリ モデル (1.5) とどのように関連しているかを知りたいと思っています。それは同じですか?似ていますか?それらに大きな違いはありますか?もしそうなら、なぜですか?

Java のメモリ モデルは昔からあり、よく知っている人も多いので、C++ のメモリ モデルを Java のメモリ モデルと比較して学習することは、私だけでなく参考になるのではないでしょうか。

0 投票する
2 に答える
471 参照

java - executor タスクのすべての副作用は、invokeAll の後に表示されますか?

いくつかのタスクをExecutorusingにサブミットした場合、返された s のそれぞれをinvokeAll呼び出さなくても、サブミットされたスレッドがタスク実行のすべての副作用を見ることが保証されますか?get()Future

実用的な観点からは、これは有用な保証になるように思われますが、javadoc には何も表示されません。

より正確にはCallable、executor に送信された の本体内のすべてのアクションは、呼び出しから戻る前に発生しますか?invokeAll()

get()実際には戻り値の型が であり、例外がスローされない場合に、各Future を無駄に呼び出すのは面倒ですVoid。すべての作業は副作用として発生します。

0 投票する
3 に答える
1294 参照

c# - 別のスレッドから部分的に構築されたオブジェクトを観察することは可能ですか?

.NET 2.0 メモリ モデルでは、書き込みには常にリリース フェンスが使用されるとよく​​耳にします。これは本当ですか?これは、明示的なメモリバリアやロックがなくても、作成されたスレッドとは異なるスレッドで部分的に構築されたオブジェクト (参照型のみを考慮) を観察することは不可能であることを意味しますか? コンストラクターが参照をリークするケースは明らかに除外していthisます。

たとえば、不変の参照型があるとします。

次のコードを使用して、「John 20」と「Jack 21」以外の出力、たとえば「null 20」または「Jack 0」を観察することは可能でしょうか?

これはまた、深く不変の参照型のすべての共有フィールドを作成しvolatile、(ほとんどの場合) 仕事を続けることができるということですか?

0 投票する
3 に答える
689 参照

java - Javaメモリモデル:コンパイラがコード行を再配置する

Java言語では、再順序付けによってコードのセマンティクスに違いがない限り、コンパイルされたコードの行をコンパイラーが再配置できることはよく知られています。ただし、コンパイラは、現在のスレッドから見たセマティックについてのみ気にする必要があります。この並べ替えがマルチスレッドの状況でセマンティクスに影響を与える場合、通常は同時実行の問題が発生します(メモリの可視性)。

私の質問:

  1. このfreedmをコンパイラに許可することで何が達成されますか?コードを再配置することで、コンパイラーがより効率的なコードを生成することは本当に可能ですか?私はこれについての実際的な事例をまだ見ていません。これがもたらす可能性のある並行性のリスクが、利益をはるかに上回っていると感じることがあります。

  2. プログラマーがコンパイラーにこのような行を再配置しないように指示できる方法はありますか?同期プリミティブを使用すると、再配置の副作用を効果的に処理できることを知っていますが、これをオフにする直接的な方法(コンパイラオプション)があるかどうかを尋ねています。

0 投票する
2 に答える
926 参照

java - フィールドを「揮発性」にすることで、同時発生する状況でのすべてのメモリの可視性の問題を防ぐことができますか?

クラスフィールドを作成すると、同時発生の状況でのすべてのvolatileメモリの可視性の問題を防ぐことができますか?以下のクラスの場合、オブジェクトの参照を取得するスレッドは、最初に0(デフォルト値の)、次に10と見なされる可能性がありますか?これは、のコンストラクターが完了せずに参照を提供する場合にのみ可能であると考えています(不適切な公開。誰かが私を検証/修正できますか?TestxintTestthis

2番目の質問:もしそうだっfinal int x=10;たら?

0 投票する
5 に答える
15330 参照

c++ - c ++、std :: atomic、std :: memory_orderとは何ですか?それらの使用方法は?

誰もstd::memory_orderが平易な英語で何があり、それらをどのように使用するかを説明できますstd::atomic<>か?

ここでリファレンスといくつかの例を見つけましたが、まったく理解していません。 http://en.cppreference.com/w/cpp/atomic/memory_order

0 投票する
4 に答える
805 参照

java - フィールドへのJava同時アクセス、揮発性を使用しないトリック

序文: ほとんどの場合、揮発性フィールドを使用しても測定可能なパフォーマンス ペナルティが発生しないことはわかっていますが、この質問はより理論的であり、非常に高い相関性をサポートする設計を対象としています。

List<Something>構築後に埋められるフィールドがあります。パフォーマンスを節約するために、リストを読み取り専用のマップに変換したいと思います。これを行うには、少なくとも volatile Map フィールドが必要になるため、すべてのスレッドで変更が表示されるようにします。

私は次のことを考えていました:

これにより、シリアライズされた方法で get ブロックに入ったとしても、複数のスレッドがマップを生成する可能性があります。スレッドがマップの異なる同一インスタンスで動作する場合、これは大きな問題にはなりません。もっと気になるのは:

1 つのスレッドが新しい一時マップをマップ フィールドに割り当て、次に 2 番目のスレッドがそれを確認してmap!=null、新しいマップ フィールドを生成せずにマップ フィールドにアクセスすることは可能ですか?まだ共有メモリ領域にプッシュされていない場所はどこですか?

コメントへの回答:

  • スレッドは一時マップのみを変更し、その後は読み取り専用になります。
  • List を Map に変換する必要があるのは、特別な JAXB セットアップが原因で、最初から Map を持つことが実現できないためです。