Да, вы можете использовать один и тот же объект блокировки (технически это монитор в смысле информатики и реализован с помощью вызовов методов в System.Monitor ) в двух разныхметодов.
Итак, скажем, что у вас есть некоторый статический ресурс r
, и вы хотели, чтобы два потока обращались к этому ресурсу, но только один поток может использовать его одновременно (это классическая цель блокировки).Затем вы должны написать код, подобный
public class Foo
{
private static object _LOCK = new object();
public void Method1()
{
lock (_LOCK)
{
// Use resource r
}
}
public void Method2()
{
lock (_LOCK)
{
// Use resource r
}
}
}
. Вам нужно ограничиться каждым использованием r
в вашей программе, так как в противном случае два потока могут использовать r
одновременно.Кроме того, вы должны использовать одну и ту же блокировку, так как иначе два потока смогут одновременно использовать r
.Таким образом, если вы используете r
в двух разных методах, вы должны использовать одну и ту же блокировку для обоих методов.
EDIT: как @diev указывает в комментариях, если ресурсбыли бы для каждого экземпляра объектов типа Foo
, мы не сделали бы _LOCK
статическими, но сделали бы _LOCK
данные уровня экземпляра.