← Каталог
Отладка и видимость состояния — 2. Блокировки и взаимоблокировки (deadlock)
Фрагмент из «Отладка и видимость состояния»: 2. Блокировки и взаимоблокировки (deadlock).
public class DeadlockExample
{
private readonly object _lock1 = new object();
private readonly object _lock2 = new object();
public void Method1()
{
lock (_lock1)
{
Thread.Sleep(100); // Имитация работы
lock (_lock2) // Ожидание _lock2
{
Console.WriteLine("Method1 completed");
}
}
}
public void Method2()
{
lock (_lock2)
{
Thread.Sleep(100); // Имитация работы
lock (_lock1) // Ожидание _lock1
{
Console.WriteLine("Method2 completed");
}
}
}
// Если вызвать оба метода в разных потоках одновременно,
// произойдёт взаимоблокировка
} public class DeadlockExample
{
private readonly object _lock1 = new object();
private readonly object _lock2 = new object();
public void Method1()
{
lock (_lock1)
{
Thread.Sleep(100); // Имитация работы
lock (_lock2) // Ожидание _lock2
{
Console.WriteLine("Method1 completed");
}
}
}
public void Method2()
{
lock (_lock2)
{
Thread.Sleep(100); // Имитация работы
lock (_lock1) // Ожидание _lock1
{
Console.WriteLine("Method2 completed");
}
}
}
// Если вызвать оба метода в разных потоках одновременно,
// произойдёт взаимоблокировка
}