Блок lock гарантує що інший потік не зможе виконати операції цього блоку, доки інший потік не звільнить цей блок і не припинить виконання операцій. Потік, який намагається увійти в цей блок, буде очікувати своєї черги на виконання доки блок не буде звільнено. Оператор lock використовує об'єкти синхронізації, в якості якого в багатьох випадках може використовуватись this, або у випадку коли необхідно виконати блок у методі статичного класу, або захистити статичну змінну використовують typeof(ім'я_класу).

Синтаксис: lock(вираз) блок_команд

Приклад: class User { String name = "no name";

public User(String _name)

name = _name;

public void PrintName()

lock (this)

Console.WriteLine("User name : " + name);

public void setName(String _name)

lock (this)

name = _name;