x64でC++マルチスレッドを使用しています。私はデータバスをよりよく理解したいと思います。私はガードなしで2つのスレッドから変数を設定しようとすると(mutex、CV、セマフォー、アトミックな)変数を設定しようとするとどうなるのか理解したい。データバスに依存するもの。例えば 私が持っている場合、変数:データバスに応じてガードなしで複数のスレッドから変数を設定する
int32_t i;
Iは、異なるスレッド内の変数に設定した場合: スレッド1:
i =0x11223344;
スレッド2:私は、x64のデータについて知っているよう
i =0x44332211;
バスは64ビットです。変数iは1命令で設定できます。私はそれがコンパイラに依存することを知っている。私はキャッシュも影響力があることを知っています。データバス(キャッシュなし)とのやり取りだけを知りたい。私の質問は、データバスの幅(8,16,32ビット)に依存する動作です。 の値は何ですか??
何も分かりません。現在のC++標準を構成する1400+ページには、「データバス」と呼ばれるものは何も言及されていません。 –
C++はこれが未定義の動作だと言っているので、その質問に答えるのには役立ちません。プログラムをアセンブリにコンパイルし、そのアセンブリ命令がどのようなコードを実行するのかを調べる必要があります(コンパイラのフラグなどによって明らかに変わります)。あなたは少なくとも答えが可能なようにアセンブリコードを掲示するべきです。 – nwp
私の質問は、セットが1つの命令に含まれている場合、両方ともアトミックになります。 –