Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

c# pytanie odnośnie działania lock

$
0
0

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?


Viewing all articles
Browse latest Browse all 21942