2012-05-03 65 views
-1

我是新來線程,我想知道如果我有很好的代碼。 情況:3類,讀者,作家和數據。 Writer以儘可能快的速度向數據寫入數據,Reader每秒鐘讀入數據(如果作者沒有寫入新數據,他會檢查標記,如果是真的,則有新數據可讀,否則可以使用舊數據)。 請告訴我的是它的數據類的有效代碼: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

您的代碼只確保幾個寫入者不會同時寫入。它不會阻止ReadData讀取和更改newData標誌,同時作者正在編寫和執行相同的操作。

0

2次連續寫入覆蓋數據。這是故意的嗎? 你是否從外部檢查newData? 你試圖達到/保護什麼行爲?