-1

私はスレッド化に不慣れで、良いコードがあるかどうか疑問に思っています。状況:リーダー、ライター、データの3つのクラス。ライターはデータをできるだけ速くデータに書き込みます。リーダーは毎秒読み取ります(ライターが新しいデータを書き込まなかった場合はフラグをチェックし、trueの場合は新しいデータを読み取り、そうでない場合は古いデータを使用できます)。Dataクラスの有効なコードかどうか教えてください。

class GameData
{
    String GameData="";
    bool newData = false;
    public String ReadData()
    {
        newData = false;
        return GameData;
    }
    public void WriteData(String d)
    {
        lock (this)
        {
            GameData = d;
            newData = true;
        }
    }
}
4

4 に答える 4

2

リーダーライターロックスリムブロッキングコレクション

良い出発点。

于 2012-05-03T13:24:18.120 に答える
1

ブロッキングコレクションの使用を検討する必要があります。これにより、ロックが処理されます。

于 2012-05-03T13:20:47.543 に答える
1

あなたのコードは、複数のライターが同時に書き込みをしないことを保証するだけです。ライターが書き込みと実行を行っているときに、ReadDataがnewDataフラグを読み取って変更することを妨げることはありません。

于 2012-05-03T13:22:56.643 に答える
0

2回の連続書き込みでデータが上書きされます。これは意図的なものですか?newDataを外部からチェックしていますか?どのような行動を達成/保護しようとしていますか?

于 2012-05-03T13:25:52.660 に答える