Я все еще смущен... Когда мы пишем что-то вроде этого:
Object o = new Object();
var resource = new Dictionary<int , SomeclassReference>();
... и имеют два блока кода, которые блокируют o
при доступе к resource
...
//Code one
lock(o)
{
// read from resource
}
//Code two
lock(o)
{
// write to resource
}
Теперь, если у меня есть два потока, с одним потоком, выполняющим код, который читает из resource
и другим письмом к нему, я хотел бы заблокировать resource
, чтобы при чтении писателю приходилось ждать (и наоборот - если он будет написан, читателям придется ждать). Будет ли конструкция замка помочь мне?... или я должен использовать что-то еще?
(Я использую Dictionary
для целей этого примера, но может быть что угодно)
Есть два случая, о которых я особенно беспокоюсь:
- две нити, пытающиеся выполнить ту же строку кода
- два потока, пытающихся работать на одном ресурсе
Помогает ли lock
в обоих условиях?