Оператор lock
Оператор lock имеет вид:
lock
объектdo
оператор
Объект обязательно принадлежит к ссылочному типу.
Оператор lock
гарантирует, что оператор будет
выполняться только одним потоком. Объект здесь хранит блокировку, а
оператор, представляющий собой тело оператора lock
,
называется блоком синхронизации. После того как первый поток заходит в блок
синхронизации, он блокирует объект, при выходе из блока синхронизации -
разблокирует. Если объект заблокирован, то никакой другой поток не может
зайти в блок синхронизации и приостанавливается до разблокировки объекта.
Оператор
lock obj do
oper;
полностью эквивалентен следующему участку кода:
Monitor.Enter(obj);
try
oper;
finally
Monitor.Exit(obj);
end;