описываемая вами система выглядит как семафоры
о вашем последнем вопросе: ДА.Ты всегда мог зайти в тупик;если вы не понимаете, как, спросите молодого / позорного / мотивированного / девиантного разработчика.
Один хороший способ сделать хороший;иметь странные правила блокировки / освобождения ресурсов.Например, если процессу требуется М ресурсов для выполнения задачи, он может сразу заблокировать половину из них, а затем ждать, пока другая половина станет доступной, прежде чем что-либо делать.
Я предполагаю, что он никогда не сдастся, пока не получит свои М драгоценные ресурсы, и не отпустит их все, как только задача будет выполнена.
Один процесс не вызовет особых проблем, но некоторые вызовут это, поскольку они заблокируют более M общих ресурсов и потребуют больше из них для выхода из этого замороженного состояния.