Junior — Middle
Можете ли да наведете стварни пример ситуације када је дошло до међусобног блокирања ресурса у систему или у животу?
sobes.tech АИ
Одговор од АИ
Взаимная блокировка (deadlock) — ситуация, когда два или более процесса (или потока) ждут освобождения ресурсов, занятых друг другом, и ни один из них не может продолжить работу.
Реальный пример из жизни: два человека идут по узкому коридору навстречу друг другу, и каждый уступает дорогу другому, ни один не хочет отступать. В итоге они оба стоят на месте и не могут пройти.
Пример в программировании на Java:
Object resourceA = new Object();
Object resourceB = new Object();
Thread thread1 = new Thread(() -> {
synchronized (resourceA) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized (resourceB) {
System.out.println("Thread 1 acquired both resources");
}
}
});
Thread thread2 = new Thread(() -> {
synchronized (resourceB) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized (resourceA) {
System.out.println("Thread 2 acquired both resources");
}
}
});
thread1.start();
thread2.start();
Здесь thread1 захватывает resourceA и ждёт resourceB, а thread2 наоборот — resourceB и ждёт resourceA. В итоге возникает взаимная блокировка.