2012-05-03 3 views
-1

Я новичок в потоковом режиме, и мне интересно, есть ли у меня хороший код. Ситуация: 3 класса, Reader, Writer и Data. Писатель записывает данные в данные так быстро, как только может, 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

Вы должны рассмотреть возможность использования blocking collection. Это позволит вам блокировать.

1

Ваш код гарантирует, что несколько авторов не будут писать одновременно. Он не будет препятствовать чтению ReadData и изменению флага newData во время написания и выполнения записи автором.

0

2 последовательных записи переписывают данные. Это намеренно? Вы проверяете newData снаружи? Какое поведение вы пытаетесь достичь или защитить?