1

i は値 5 のグローバル変数で、関数 v() は 3 つのスレッドによって呼び出されます。

v()
{
    i++;
    i--;
}

スレッドは同期されていません。
いいえは何ですか。i の可能な結果とそれらは何ですか?

4

1 に答える 1

0

は単一のステートメントであり(同じことが)であり、ステートメントとの順序が何であれ、結果は常にであるi=5ため、出力は常にになります。i++i--i++i--i=5

int tmp = i; i = tmp + 1;の代わりに持っている場合は、単一のステートメントではないため、持つことがi++できます。i≠5int tmp = i; i = tmp + 1;

2つのスレッド(AとBという名前)のすべての可能性は次のとおりです。

        | i = 5
A: i++  | i = 6
A: i--  | i = 5
B: i++  | i = 6
B: i--  | i = 5

        | i = 5
A: i++  | i = 6
B: i++  | i = 7
A: i--  | i = 6
B: i--  | i = 5

        | i = 5
A: i++  | i = 6
B: i++  | i = 7
B: i--  | i = 6
A: i--  | i = 5
于 2012-06-20T13:28:44.560 に答える