Взаимная блокировка

Взаи́мная блокиро́вка (англ. deadlock) — ситуация в многозадачной среде, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами.

Простейший пример взаимной блокировки

Процесс 1 Процесс 2
Хочет захватить A и B, начинает с A Хочет захватить A и B, начинает с B
Захватывает ресурс A
Захватывает ресурс B
Ожидает освобождения ресурса A
Ожидает освобождения ресурса B
Взаимная блокировка

Отладка взаимных блокировок, как и других ошибок синхронизации, усложняется тем, что для их возникновения нужны специфические условия одновременного выполнения нескольких процессов (в вышеописанном примере если бы процесс 1 успел захватить ресурс B до процесса 2, то ошибка не произошла бы).

Livelock

Это слово означает такую ситуацию: система не «застревает» (как в обычной взаимной блокировке), а занимается бесполезной работой, её состояние постоянно меняется — но, тем не менее, она «зациклилась», не производит никакой полезной работы.

Жизненный пример такой ситуации: двое встречаются лицом к лицу. Каждый из них пытается посторониться, и они не расходятся, а несколько секунд ходят влево-вправо.

Такая ситуация, например, происходит, при реализации сетевого обмена через прерывания. Если сетевой трафик очень оживлённый, система всё время занимается обработкой входящих пакетов, не выполняя никакого полезного действия.

См. также

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home