0

2 つのスレッドがまったく同時に同じプロパティを変更しようとするとどうなりますか? たとえば、 があり、int value = 0スレッド Avalue += 5とスレッド Bvalue -= 3がある場合、どうなりますか? スレッドが変数にアクセスする順序に関係なく、同じ結果が得られるはずですが、正確に同時にその変数にアクセスできると思います。

4

2 に答える 2

1

いいえ、同じ結果は得られません。操作は単純ですが、プロセッサに対するアトミック操作ではありません。簡単に言えば、プロセッサはメモリからレジスタに値をフェッチし、算術命令を実行して、値をメモリに格納する必要があります。したがって、それらは同じ値の 0 を取得する可能性があり、保存される値はどちらが最後かによって異なります。

得られる結果は、実行ごとに異なります。5、-3、2 の可能性があります。

于 2013-10-22T03:05:15.890 に答える
1

コンピューターには正確な時刻はありません。これは、1 つのスレッドで 1 ナノ秒以下であり、次にもう 1 つのスレッドです。タイムスライスといいます。私たちにとっては単一+=-=操作かもしれませんが、プロセッサにとっては複数の命令です。

同期のない上記のコードは競合状態を引き起こし、常に同じ値を保証しません。

于 2013-10-22T03:05:47.740 に答える