Оператор lock

Оператор lock

Оператор lock имеет вид:

lock объект do

оператор

Объект обязательно принадлежит к ссылочному типу.

Оператор lock гарантирует, что оператор будет выполняться только одним потоком. Объект здесь хранит блокировку, а оператор, представляющий собой тело оператора lock, называется блоком синхронизации. После того как первый поток заходит в блок синхронизации, он блокирует объект, при выходе из блока синхронизации - разблокирует. Если объект заблокирован, то никакой другой поток не может зайти в блок синхронизации и приостанавливается до разблокировки объекта.

Оператор

lock obj do

oper;

полностью эквивалентен следующему участку кода:

Monitor.Enter(obj);

try

oper;

finally

Monitor.Exit(obj);

end;