3

私のは、私が少し混乱している簡単な例を示しています。

それは、「次のプログラムを考えて、きめの細かいアトミック アクションが変数の読み取りと書き込みを行っていると仮定してください」と述べています。

int y = 0, z = 0;
co x = y+z; // y=1; z=2; oc;

"x = y + zレジスタに y をロードしてから z を追加することで実装されている場合、x の最終値は 0、1、2、または 3 になります。"

2? 2 はどのように機能しますか?

注: co は並行プロセスを開始し、 // は並列実行ステートメントを示します

4

2 に答える 2

6

プログラムには、2 つの並列シーケンスがあります。

シーケンス 1:x = y+z;

シーケンス 2:y=1; z=2;

シーケンス 1 の操作は次のとおりです。

  1. yy の値をレジスタにコピーします。
  2. + zz の値をレジスタの値に加算します。
  3. x =レジスタの値を x にコピーします。

シーケンス 2 の操作は次のとおりです。

  1. y=1;y の値を 1 に設定します。
  2. z=2;z の値を 2 に設定します。

これら 2 つのシーケンスは同時に実行されますが、シーケンス内のステップは順番に発生する必要があります。したがって、次の順序で x 値 '2' を取得できます。

  1. y=0
  2. z=0
  3. yy の値をレジスタにコピーします。(レジスタ値は現在「0」です)
  4. y=1;y の値を 1 に設定します (結果には影響しません。既に y をレジスタにコピーしています)。
  5. z=2;z の値を 2 に設定します。
  6. + zz の値をレジスタの値に加算します。(レジスタ値は現在「2」です)
  7. x =レジスタの値を x にコピーします。(x の値は現在 '2' です)
于 2011-10-16T04:21:21.737 に答える
0

それらは並行して実行されると想定されているため、割り当て x = y + z が発生した場合、さらに単純なケースは y=0、z=2 になる可能性があると思います。

于 2011-10-16T05:17:38.447 に答える