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