0

そのため、次の状況に対処しています。すべてのスレッドが特定の「if」に到達しないまでループを実行するようにしたいので、0 を格納するグローバル変数を使用し、if ステートメントに到達するとその変数が 1 になります。

問題は、ループの最後にすべてのスレッドを同期するためのバリアを実行し (私の場合は 4 つしかありません)、グローバル変数の値が 1 の場合にのみ到達し、他のスレッドの値が 0 になることです。

それはどうしてですか?グローバル変数が異なるスレッドで異なる値を持つにはどうすればよいですか?

4

1 に答える 1

0

グローバル変数はいくつかのバッファとキャッシュとして設定されていると思います。スレッドの1人がこの変数を1に書き込みますが、物理メモリには書き込みませんが、キャッシュラインに書き込みます。このような場合、他のスレッドは更新された値を取得しませんでした。

于 2012-09-08T14:09:57.540 に答える