.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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д