2012-05-03 9 views
-1

私はスレッディングが新しく、私は良いコードがあるのだろうかと思っています。 状況:3つのクラス、リーダー、ライター、データ。 Writerはできるだけ早くDataにデータを書き出します.Readerは1秒ごとに読み取ります(書き手が新しいデータを書き込んでいない場合は、それが真であれば新しいデータがあり、古いデータは使用できません)。 は、データクラスの有効なコードで教えてください:C#スレッド - ロックまたはモニタが必要ですか?

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; 
     } 
    } 
} 
+1

[この無料電子ブック](http://www.albahari.com/threading/)を読むことをお勧めします –

+0

あなたの説明はコードと一致しません。コードでは、 'readData'は' newData'の値にかかわらずデータを読み込みます。実際、 'newData'が何かを達成するようには見えません。' ReadData'と 'WriteData'の両方がそれを書きますが、誰もそれを読みません。 –

+0

@ JerryCoffin - 私はReadData()チェックの呼び出し元を想定しています。 –

答えて

1

をあなたはblocking collectionを使用して検討すべきです。これはあなたのためのロックを処理します。

1

あなたのコードでは、複数のライターが同時に書き込みを行わないようにしています。 Writerが書き込みを行っている間、Re​​adDataがnewDataフラグを読み取ったり変更したりすることはありません。

0

2つの連続した書き込みがデータを上書きします。これは意図的ですか? 外部からnewDataを確認していますか? どのような動作を達成/保護しようとしていますか?

関連する問題