0

これが発生する前に x が 0 に初期化された場合、次の 2 つの for ループが 2 つの異なるプロセスで同時に実行された後の x の可能な値は何ですか? (各工程に1個)

for (i = 0; i < 5; i++)
    x++

for (j = 0; j < 5; j++)
    x--

(編集済み) ここで何が起こりますか? 命令が失敗する可能性はありますか?それとも、結果は常に x = 0 になりますか?

4

1 に答える 1

1

ロックコードがないため、デッドロックが発生する理由はありません。i と j の異なる値は、スレッド実行の非決定論的順序に依存します。最初のスレッドが開始し、i=4 までに停止すると、2 番目のスレッドが開始し、i をゼロに初期化し、1 番目と 2 番目のループの終わりまで続行します。2 番目のスレッドが再開し、i=6 (前のスレッドが残した値) として最初のループからすぐに終了し、2 番目のループで通常どおりに進みます。これは 1 つのシナリオにすぎません。似たようなものを思いつくことができ、可能性は無限大です。

于 2013-10-07T18:45:05.160 に答える