0

私は(おそらく愚かな)質問があります:

2つのスレッドを使用している場合、1つはフロートを書き込み、もう1つはこのフロートを永続的に読み取ります。私の質問は、それらを同期しないと何が悪化する可能性があるかということです。一部の値は、書き込み操作ごとに少しだけ切り替わるため、正しくない場合でも問題はありません。現時点ではこの方法でアプリケーションを実行していますが、問題はないので、何が悪化する可能性があるのか​​知りたいですか?

読み取り/書き込みの競合により、54321に書き込まれる12345のような数値が発生し、同時に赤がたとえば54345と表示されます。または何か悪いことが起こる可能性がありますか?(コードをできるだけ速く保つために同期を使用したくない)

4

3 に答える 3

3

発生する可能性のある最悪の事態は、リーダースレッドがライタースレッドが書き込んだものをまったく認識しないことです。あるスレッドによって書き込まれたメモリが、何らかの形式の同期なしに別のスレッドによって認識されるという保証はありません。

于 2010-04-06T23:11:39.307 に答える
0

1つのスレッドが特定のfloatに書き込み、値を「a」から「b」に変更した場合、同じfloatを読み取る別のスレッドには、「a」または「b」のいずれかのみが表示され、3番目の値は表示されません。

アプリで発生する可能性のあるその他の潜在的なロジックの問題については、アプリについて詳しく知らなければ、これに答えることはできません。

于 2010-04-06T23:10:25.973 に答える
0

最悪の場合、同時実行性の問題が原因でアプリケーションが適切に動作しないため、ユーザーがアプリケーションに誤りがあることに気付く場合があります。

競合のないロックは、多くのオーバーヘッドを追加しません。最初に常にアプリケーションを正しく記述し、問題のある領域がどこにあるかを示すメトリックを実行した後にのみ最適化する必要があります。アプリケーションコードの多くは、基本的な同期ではなく、パフォーマンスの問題の原因である可能性が高いと思います。

于 2010-04-07T05:58:24.880 に答える