Witam.
Maiłem problem którego szukałem dobre kilka godzin w dwóch programach łączących się przez tcp w każdym po 3 wątki i udało mi się znaleźć.
Napisałem takie coś:
BinaryReader _reader; BinaryWriter _writer; object lockReader = new object(); object lockWriter = new object(); public BinaryReader Reader { get { lock (lockReader) return _reader; } set { lock (lockReader) _reader = value; } } public BinaryWriter Writer { get { lock (lockWriter) return _writer; } set { lock (lockWriter) _writer = value; } }
Przez resztę kodu cały czas korzystałem z Writer i Reader. Myślałem że ta sprawa jest już załatwiona a tu niespodzianka. W dwóch wątkach działających równolegle przekazywałem do funkcji Writer i nie działał jakby lock i robiły się błędy których nawet mi nie pokazywało.
Załóżmy że będzie takie coś:
void costam(BinaryWriter bw) { while (true) { bw.Write("asdfsdf"); } } ........ ParameterizedThreadStart akcja = (obj) => { costam(Writer); }; Thread w1 = new Thread(akcja); Thread w1 = new Thread(akcja); w1.Start(); w2.Start();
Dlaczego w takim przypadku lock nie zadziała?