.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();