Ответ 1
Да, вы можете использовать один и тот же объект блокировки (это технически monitor в смысле компьютерной науки и реализуется с вызовами методов в 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
static, а делали бы _LOCK
данные уровня экземпляра.