Ситуация взаимоблокировки в параллельном программировании возникает, когда несколько параллельно работающих активностей (программных сущностей) ожидают ресурсов, захваченных друг другом. bigenc.ru
Некоторые причины возникновения взаимоблокировки:
- Совместное выполнение. javarush.com Ресурс может быть доступен только одной нити в произвольный момент времени. javarush.com
- Удержание ресурса. javarush.com Во время захвата одного ресурса нить пытается заполучить ещё одну блокировку какого-то уникального ресурса. javarush.com
- Отсутствие приоритетного прерывания обслуживания. javarush.com Отсутствует механизм, освобождающий ресурс, если одна нить удерживает блокировку определённый промежуток времени. javarush.com
- Круговое ожидание. javarush.com Во время исполнения возникает совокупность нитей, в которой две (или более) нити ждут друг от друга освобождения ресурса, который был заблокирован. javarush.com
Также к взаимоблокировке может привести потерянный из-за некорректной синхронизации сигнал. bigenc.ru В этом случае один поток будет находиться в бесконечном ожидании сигнала, а второй поток, пославший сигнал, будет ожидать результата. bigenc.ru