.NET 4.x Lock как правильно использовать? - C#

Узнай цену своей работы

Формулировка задачи:

Ребят, я тут только с lock-ом разбираюсь... Я так понял что его параметр это ключ доступа, соответственно с разным ключом в один и тот же блок не зайдёшь и как "писали где-то" , - "все остальные потоки ждут". Мне нужно ограничить доступ к одной и той же переменной, которую использует поток. Я попытался сделать вот так, с расчётом на то что пока поток1 не выйдет из блока, второй к его составляющим (_result) не достучится. Но 2й поток свободно берёт переменную и использует её (кидает меседж бокс). Как заблочить доступ к полю для всех потоков, пока "какой-то" один его использует?
new Thread(() =>
            {
                 Object thisLock = new Object();
                lock (thisLock)
                {
                    _result = SET_XML_PATH_PC(AppDomain.CurrentDomain.BaseDirectory);
                    MessageBox.Show(_result.ToString());
                }
            }).Start();
            new Thread(() => {
                Thread.Sleep(500); //это для проверки... ну мало ли, второй влазит вперёд первого потока...

                                     MessageBox.Show(_result.ToString());
                                
            }).Start();

Решение задачи: «.NET 4.x Lock как правильно использовать?»

textual
Листинг программы
 Object thisLock = new Object();
new Thread(() =>
            {
                var result = SET_XML_PATH_PC(AppDomain.CurrentDomain.BaseDirectory);
                lock (thisLock)
                    _result = result;
                
                MessageBox.Show(_result.ToString());
            }).Start();
            new Thread(() => {
                Thread.Sleep(500); //это для проверки... ну мало ли, второй влазит вперёд первого потока...
                
                TypeOfResult result;
                lock (thisLock)
                   result = _result;
 
                MessageBox.Show(result.ToString());
                                
            }).Start();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы